c語言單鏈表的建立,字串搜尋

2021-09-09 06:04:28 字數 2037 閱讀 7482

最近在寫課程設計,奈何本人水平有限,查詢了各個大佬們部落格的寫法,最終還算是完成了,下面分享下單鏈表的建立,刪除,搜尋的**。

一,建立和尾插

struct node

;typedef struct node listnode;

listnode* creatlist(listnode*p)//建立鍊錶

pre->next=null;

}else        //如果傳入的p的位址不為空,即之前已經建立了鍊錶,那麼找到

printf("請輸入乙個非0數以繼續錄入學生資訊:\n");

scanf("%d",&i);

while(i!=0)//通過迴圈不斷加入新的結點

}return head;//返回這個鍊錶的首位址

}

此部分完成的功能主要是:判斷傳入的p是否完成了鍊錶的初始化,若沒有完成,就進行鍊錶的初始化,沒有完成就進行尾插。由於沒有太多經驗,並且方便我課設的功能:學生資訊錄入,分析後認為此功能可以將兩個功能合併起來。但是為了方便管理,**進行了改進,主要**在上,就不貼詳細的**,只提供一下我的i想法:

listnode*information(listnode*p)

注意:要使用p==null這一判斷,請在主函式定義時,令listnode*p==null,將其指標域清空

二,字串搜尋

void changedate(listnode*h)//查詢

if(answer==null)

printf("沒有學號為%s的學生\n",id);

else

printf("找到啦!存在學號為%s的同學\n",id);

}

這一段**的核心是    

answer=h->next;

while(strcmp(answer->id,id)&&answer!=null)

首先,傳入的位址為頭結點的位址,令answer的為頭結點的下乙個節點的位址,然後進入while迴圈。

while迴圈在這裡的意思是:

將answer->id的字串大小與id比較,如果相等,即相同,則返回0,跳出迴圈,此時answer的位址,即為搜尋到的儲存了學生id的節點的位址。

如果到了最後,answer的指標域是空的,answer!=null為假,就跳出迴圈。通過下方的判斷返回沒有找到學生資訊。

這樣看,感覺這個**很完美,但是在實際測試中,如果查詢乙個不存在的id,vc6可以正常跑起來,codeblocks就會崩掉,在苦苦思索了很久之後,找到了解決的辦法。

answer=h->next;

while(answer!=null&&strcmp(answer->id,id))

即將while的迴圈條件前後調換了個位置,因為系統在執行的時候,是從左往右的,當answer的位址為null的時候,很顯然他的內容也是空的,strcmp可能就會因此出問題。如果將answer!=null提前,當answer=null時,answer!=null為假,邏輯運算子有乙個短路的特點,就不會執行後面那一句,錯誤地以避免。

以下為改進後的搜尋**

void changedate(listnode*h)//查詢

if(h->next==null)

printf("請輸入你要修改資訊的學生的學號:\n");

scanf("%s",&id);

answer=h->next;

while(answer!=null&&strcmp(answer->id,id))

answer=answer->next;

if(answer==null)

printf("沒有學號為%s的學生\n",id);

else

printf("找到了學號為%s的同學!",id);

}

c語言建立單鏈表

include include 資料結構定義 typedef struct lnode lnode,linklist 頭插法 void create linklist l,int a,int n 輸出 void print linklist l void main create l,a,10 pri...

C語言 單鏈表的建立

鍊錶 動態地進行儲存分配的一種結構,根據需要開闢記憶體單元。鍊錶有乙個頭變數 head 該變數存放乙個位址指向第乙個元素。鍊錶中每乙個元素稱為乙個結點,每個結點由兩個部分構成,一為存放的資料,二為指向下乙個節點的位址 struct student 鍊錶建立函式 當鍊表建立完成後ptail結點位址最後...

C語言字串 字串排序

本題要求編寫程式,讀入5個字串,按由小到大的順序輸出。輸入為由空格分隔的5個非空字串,每個字串不包括空格 製表符 換行符等空白字元,長度小於80。按照以下格式輸出排序後的結果 after sorted 每行乙個字串 red yellow blue green white after sorted b...