C語言基礎入門:鏈表詳解篇


  鏈表是一種常見的重要的數據結構。它是動態地進行存儲分配的一種結構。它可以根據需要開辟內存單元。鏈表有一個“頭指針”變量,以head表示,它存放一個地址。該地址指向一個元素。鏈表中每一個元素稱為“結點”,每個結點都應包括兩個部分:

  一為用戶需要用的實際數據,二為下一個結點的地址。因此,head指向第一個元素:第一個元素又指向第二個元素;……,直到最后一個元素,該元素不再指向其它元素,它稱為“表尾”,它的地址部分放一個“NULL”(表示“空地址”),鏈表到此結束。

  鏈表的各類操作包括:學習單向鏈表的創建、刪除、 插入(無序、有序)、輸出、 排序(選擇、插入、冒泡)、反序等等。

  基本操作

  1. 節點的構造

  #include

  #include

  #include

  #defineLEN sizeof(struct stu)structstu{

  //數據char num[10];char name[20];float score;

  //指針structstu*next;};

  2. 建立鏈表

  struct stu *create(){

  /structstu*head;structstu*p1, *p2;

  head = (struct stu *)malloc(LEN); head->next =NULL;

  p1 = head;

  p2 = (struct stu *)malloc(LEN);

  printf("輸入個人信息:學籍號、姓名和總成績\n");

  scanf("%s%s%f",p2->num, p2->name, &p2->score); getchar();

  while(strcmp(p2->num,"0") !=0){/*

  執行結束后

  1。p2的next域為NULL.

  2。第一個節點的next域指向第二個節點的數據域

  3。p1指針指向第二個節點的數據域

  p2->next = p1->next; p1->next = p2; p1 = p2;

  p2 = (struct stu *)malloc(LEN);printf("輸入個人信息:學籍號、姓名和總成績\n");

  scanf("%s%s%f",p2->num, p2->name, &p2->score); getchar(); }

  free(p2);returnhead;};

  3. 輸出鏈表

  void print(struct stu * head){structstu*p;

  printf("num name score\n"); p = head->next;

  while(p!=NULL){

  printf("%-10s %-20s %-4.1f\n",p->num, p->name, p->score);

  p=p->next; }}

  4. 插入節點

  void insert(struct stu * head, struct stu * p0)

  { struct stu *p1, *p2; p1 = head->next;p2 = head;

  while((p1!=NULL) && (strcmp(p0->num, p1->num)==1))

  {p2=p1; p1=p1->next; } p0->next = p2->next; p2->next = p0;}

  5. 刪除節點

  int delete(struct stu *head,charnum[]){ structstu*p1, *p2;p1 = head->next; p2 = head;

  while(p1!=NULL&&strcmp(num, p1->num)!=0)

  { p2=p1; p1=p1->next; }

  if(!p1){return0; }

  p2->next = p1->next;free(p1);return1;}

  6. 主函數

  //主函數int main()

  {structstu*h, *p0;charnum[10];printf("建立鏈表\n");

  h = create(); p0 = (struct stu *)malloc(LEN);

  printf("輸入待插入的個人信息:學籍號、姓名和總成績\n");

  scanf("%s%s%f",p0->num, p0->name, &p0->score);

  getchar();if(strcmp(p0->num,"0") !=0){ insert(h, p0); }

  printf("輸入待刪除個人信息的學號\n");

  scanf("%s",num);if(strcmp(num,"0") !=0){delete(h, num);

  }printf("輸出鏈表\n"); print(h);return0;}鄭州不孕不育醫院http://jbk.39.net/yiyuanzaixian/zztjyy/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM