c語言 鍊錶例項講解 兩個經典例子

2021-06-22 19:33:02 字數 3532 閱讀 7110

建立乙個學生成績的線性鍊錶,對其實現插入,刪除,輸出,最後銷毀。

#include

#include

struct grade ;

typedef struct grade node;

//typedef為c語言的關鍵字,作用是為一種資料型別定義乙個新名字。

//使用typedef目的一般有兩個,乙個是給變數乙個易記且意義明確的新名字,

//另乙個是簡化一些比較複雜的型別宣告。

struct grade *create();   //建立鍊錶

void insert(node *head,node *pnew,int i);   //插入鍊錶

void pdelete(node *head,int i);   //刪除列表

void display(node *head);   //輸出鍊錶

void pfree(node *head);    //銷毀鍊錶

int main(int argc, char *argv)

pnew->score=88;

insert(head,pnew, 3);   //將新節點插入節點3的後面 

printf("插入後的鍊錶:");

display(head);

pdelete(head,3);   //刪除節點3 

printf("刪除後的鍊錶:");

display(head);

pfree(head);

return 0;

}struct grade *create()

head->next=null;  //頭節點指標域置null

tail=head;  // 開始時尾指標指向頭節點

printf("輸入學生成績:");

while(1)    //建立鍊錶

pnew->score=score;  //新節點資料域存放輸入的成績 

pnew->next=null;   //新節點指標域置null 

tail->next=pnew;  //新節點插入到表尾 

tail=pnew;   //為指標指向當前的尾節點 }

return head;  //返回建立鍊錶的頭指標  }

void insert(node *head,node *pnew,int i)

pnew->next=p->next;   //插入節點的指標域指向第i個節點的後繼節點

p->next=pnew;    //犟第i個節點的指標域指向插入的新節點

}void pdelete(node *head,int i)

q=p->next;  //q指向待刪除的節點 

p->next=q->next;  //刪除節點i,也可寫成p->next=p->next->next 

free(q);   //釋放節點i的記憶體單元 

}void display(node *head)

void pfree(node *head)

free (head);  //最後刪除頭節點  }

void pfree(node *head)

free(p); }

**:鍊錶是c語言中比較難,但是又比較重要的資料結構,相信有很多人在為它而頭痛哦。

我做了乙個鍊錶的程式,發出來與大家共享,希望大家能用得著。

#include

#include

#include

#include

//鍊錶單元定義,鍊錶相關變數

struct student

*head,*pthis;

//輸入資料建立鍊錶

void input()

scanf("%d\t%f",&tmp->id,&tmp->score);

tmp->next=null;

if(tmp->id!=0)

else}}

while(tmp->id!=0);

free(tmp);

}

//搜尋鍊錶找到第乙個符合條件的專案輸出

void search(int id)

pthis=head;

while(pthis!=null)

else

}printf("\n沒有找到!\n");

}

//列表輸出鍊錶中的所有項

void list()

pthis=head;

while(pthis!=null)

}

//插入資料

void insert()

printf("\n請輸入插入點:\n");

scanf("%d",&p);

if(p<0)

printf("\n\n請輸入學生的資訊:\nid\t成績\n");

if((tmp=(struct student*)malloc(sizeof(struct student)))==null)

scanf("%d\t%f",&tmp->id,&tmp->score);

tmp->next=null;

if(tmp->id!=0)

else

pthis=pthis->next;

}tmp->next=pthis->next;

pthis->next=tmp;}}

else

}

//追加資料

//刪除資料

void del()

printf("\n\n請輸入要刪除的記錄號:\n");

scanf("%d",&p);

if(p<0)

if(p==0)

else

}tmp=pthis->next;

pthis->next=pthis->next->next;

free(tmp);

}}

//程式主函式

void main()

{char command=0;

int id=0;

//主迴圈do{

printf("\n\n\t 選單\n");

printf("-------------------------------\n");

printf("\ta,輸入資料\n");

printf("\tb,查詢記錄\n");

printf("\tc,資料列表\n");

printf("\td,追加記錄\n");

printf("\te,插入記錄\n");

printf("\tf,刪除記錄\n");

printf("\tg,退出系統\n");

printf("-------------------------------\n");

printf("\t請選擇:");

command=getch();

//命令處理

C語言經典例74 連線兩個鍊錶

連線兩個鍊錶,如有鍊錶a和鍊錶b,將鍊錶b按原順序接在鍊錶a後面,鍊錶結構為 typedef int elementtype typedef struct node list 本題在邏輯上很簡單,不難想出只要得到鍊錶a的最後乙個節點指標,然後將其指向鍊錶b的第乙個節點即可,注意建立鍊錶時,鍊錶帶頭節...

c語言歸併兩個有序鍊錶

歸併有序列表l1,l2到l3,使l3有序,從小到大 xxwu include include include typedef int elemtype typedef struct lnode lnode,linklist 初始化 尾插法 以9999退出 linklist initlisttill ...

合併兩個非降序鍊錶(C語言)

問題描述 兩個非降序鍊錶的並集,例如將鍊錶1 2 3 和 2 3 5 並為 1 2 3 5,只能輸出結果,不能修改兩個鍊錶的資料。輸入形式 第一行為第乙個鍊錶的各結點值,以空格分隔。第二行為第二個鍊錶的各結點值,以空格分隔。輸出形式 合併好的鍊錶,以非降序排列,值與值之間以空格分隔。樣例輸入 4 7...