回覆列表
  • 1 # lanfengkd

    連結串列可以解決很多實際問題,比如資料結構課程上講的多項式運算、求解約瑟夫問題,作業系統原理中的記憶體管理器實現等等。舉一個在Windows透過連結串列搜尋檔案的例項,程式碼如下(vc6.0中編譯透過)。

    #include <stdio.h>

    #include <windows.h>

    struct DirList{

    char table[256];

    DirList *pNext;

    };

    DirList *first,*newlist,*last;

    //加入資料夾連結串列

    void AddList(char *list)

    {

    newlist=new DirList;

    strcpy(newlist->table,list);

    newlist->pNext=NULL;

    //假如檔案連結串列為空,那麼第一個和最後一個節點都指向新節點

    if(first==NULL)

    {

    first=newlist;

    last=newlist;

    }

    //不為空,則原來最後一個節點指向新節點

    else

    {

    last->pNext=newlist;

    last=newlist;

    }

    }

    //查詢檔案,並把找到的資料夾加入資料夾連結串列

    void FindFile(char *pRoad,char *pFile)

    {

    char FileRoad[256]={0};

    char DirRoad[256]={0};

    char FindedFile[256]={0};

    char FindedDir[256]={0};

    strcpy(FileRoad,pRoad);

    strcpy(DirRoad,pRoad);

    strcat(DirRoad,"\\*.*");

    WIN32_FIND_DATA findData;

    HANDLE hFindFile;

    hFindFile=FindFirstFile(DirRoad,&findData);

    if(hFindFile!=INVALID_HANDLE_VALUE)

    {

    do

    {

    if(findData.cFileName[0]==".")

    continue;

    //假如是資料夾,則假如資料夾列表

    if(findData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)

    {

    strcpy(FindedDir,pRoad);

    strcat(FindedDir,"\\");

    strcat(FindedDir,findData.cFileName);

    //加入資料夾列表

    AddList(FindedDir);

    memset(FindedDir,0x00,256);

    }

    //繼續查詢

    }while(FindNextFile(hFindFile,&findData));

    }

    strcat(FileRoad,"\\");

    strcat(FileRoad,pFile);

    //查詢要查詢的檔案

    hFindFile=FindFirstFile(FileRoad,&findData);

    if(hFindFile!=INVALID_HANDLE_VALUE)

    {

    do

    {

    strcpy(FindedFile,pRoad);

    strcat(FindedFile,"\\");

    strcat(FindedFile,findData.cFileName);

    //輸出查詢到的檔案

    printf("%s\n",FindedFile);

    memset(FindedFile,0x00,256);

    }while(FindNextFile(hFindFile,&findData));

    }

    }

    int SeachFile(char *Directory,char *SeachFile)

    {

    DirList NewList;

    strcpy(NewList.table,Directory);

    NewList.pNext=NULL;

    last=&NewList;

    first=&NewList;

    while(true)

    {

    DirList *Find;

    //假如連結串列不為空,提取連結串列中的第一個節點,並把第一個節點指向原來第二個

    if(first!=NULL)

    {

    //提取節點

    Find=first;

    //並把第一個節點指向原來第二個

    first=first->pNext;

    //在提取的節點的目錄下查詢檔案

    FindFile(Find->table,SeachFile);

    }

    //為空則停止查詢

    else

    {

    printf("檔案搜尋完畢\n");

    return 0;

    }

    }

    return 0;

    }

    int main(int argc, char* argv[])

    {

    if (argc!=3) {

    printf("程式名 檔案目錄 要搜尋的檔名\n");

    return 0;

    }

    SeachFile(argv[1],argv[2]);

    return 0;

    }

    執行效果如下,測試搜尋c:\windows目錄中的記事本程式notepad.exe。

  • 中秋節和大豐收的關聯?
  • 給頁字加偏旁組新字?