[例7.11]寫一個函數(shù),在鏈表中按學號查找該結(jié)點。
TYPE * search (TYPE *head,int n)
{
TYPE *p;
int i;
p=head;
while (p->num!=n && p->next!=NULL)
p=p->next; /* 不是要找的結(jié)點后移一步*/
if (p->num==n) return (p);
if (p->num!=n&& p->next==NULL)
printf ("Node %d has not been found!\n",n
}
本函數(shù)中使用的符號常量TYPE與例7.10的宏定義相同,等于struct stu。函數(shù)有兩個形參,head是指向鏈表的指針變量,n為要查找的學號。進入while語句,逐個檢查結(jié)點的num成員是否等于n,如果不等于n且指針域不等于NULL(不是最后結(jié)點)則后移一個結(jié)點,繼續(xù)循環(huán)。如找到該結(jié)點則返回結(jié)點指針。 如循環(huán)結(jié)束仍未找到該結(jié)點則輸出“未找到”的提示信息。
[例7.12]寫一個函數(shù),刪除鏈表中的指定結(jié)點。刪除一個結(jié)點有兩種情況:
1. 被刪除結(jié)點是第一個結(jié)點。這種情況只需使head指向第二個結(jié)點即可。即head=pb->next。其過程如圖7.5所示。
2. 被刪結(jié)點不是第一個結(jié)點,這種情況使被刪結(jié)點的前一結(jié)點指向被刪結(jié)點的后一結(jié)點即可。即pf->next=pb->next。其過程如圖7.6所示。
函數(shù)編程如下:
TYPE * delete(TYPE * head,int num)
{
TYPE *pf,*pb;
if(head==NULL) /*如為空表, 輸出提示信息*/
{ printf("\nempty list!\n");
goto end;}
pb=head;
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |