国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

單向鏈表例題

2019-11-10 18:49:13
字體:
來源:轉載
供稿:網友


#include <stdio.h>#include <stdlib.h>

struct node        //定義結點的結構體{ int num; char name[100];

 struct node *next;};

typedef struct node Node;    //將struct node簡單定義為Nodetypedef struct node *Link;    //將stcuct node類型定義為*Link

void create_link(Link * head)   //創建頭指針,并定義為空指針{ *head = NULL;}

void insert_node_head(Link * head, Link new_node) //插入新的結點(頭插)(插哪,哪個結點){ new_node -> next = *head; *head = new_node;}

void insert_node_tail (Link * head, Link new_node)   //尾插{ Link p = NULL;    p = *head;

 if(p == NULL)            //鏈表為空 {        *head = new_node;  new_node -> next = NULL; } else {  while(p -> next != NULL)  {   p = p -> next;     }

  p -> next = new_node;  new_node -> next = NULL; }}

void display_link (Link head)        //輸出{ Link p ; p = head;

 if(head == NULL) {  PRintf("Link is empty!/n");  return; }

 while(p != NULL) {  printf("num = %d/n",p -> num);  printf("name = %s/n",p -> name);  printf("/n");  p = p -> next;     //下一個 }}

void release_link (Link * head)             //釋放鏈表{ Link p; p = *head;        while(*head != NULL) {        p = *head;  *head = (*head) -> next;     free(p); }

}

void delete_node (Link * head, int number)      //刪除其中一個結點{    Link p = NULL; Link q = NULL; p = * head; q = * head;

 if(*head == NULL) {  return; } else {  if((*head) -> num == number)  {   *head = p -> next;   free(p);  }  else  {   while(p != NULL && p -> num != number)   {    q = p;    p = p -> next;   }

   if(p == NULL)   {    printf("no node!/n");   }   else if( p->next != NULL)   {    q -> next = p -> next;    free(p);   }   else    {       q -> next = NULL;    free(p);   }  } }}

int number_link (Link head)         //計算鏈表長度并返回{ Link p; p = head; int num = 0;

 while(p != NULL) {  p = p -> next;  num++; }

 return num;

}

Link find_link (Link  head, int n)        //查找對應學號所在結點內容{ Link p; p = head;

 while(p -> num != n && p != NULL) {  p = p -> next; }

 return p;}

void Flashback_link (Link *head)       //倒敘輸出鏈表{ Link p1; Link p2; Link p3;

 p1 = *head; p2 = p1 -> next; p3 = p2 -> next;

 if(*head == NULL || p1 -> next == NULL) {        return; } else if(p2 -> next == NULL) {  p2 -> next = p1;  p1 -> next = NULL;  *head = p2; } else {  p2 -> next = p1;

  while(p3 -> next != NULL)  {   p1 = p2;   p2 = p3;   p3 = p3 -> next;   p2 -> next = p1;  }  p3 -> next = p2;  (*head) -> next = NULL;  *head = p3; }}

void enter_link (Link *head, Link enter_node,int number)   //插入新的結點{    Link p = NULL; p = * head;     if(*head == NULL)    //空 {  *head = enter_node;  enter_node -> next = NULL; } else if(p -> num == number) {  enter_node -> next = *head;  *head = enter_node; } else {  while(p != NULL && p -> num != number)  {   p = p -> next;  }    if(p != NULL)  {   p = *head;   while((p->next) -> num != number)   {    p = p -> next;   }   (enter_node) -> next = (p -> next);   p -> next = enter_node;  }  else   {   p = *head;      while(p -> next != NULL)   {    p = p -> next;   }   p -> next = enter_node;   enter_node -> next = NULL;  }

 }

}

int main(){ Link head = NULL; Link new_node = NULL; Link enter_node = NULL; int i; int n; int num; int number;

 create_link(&head);

 for(i = 0; i < 3; i++) {  new_node = (Link)malloc(sizeof( Node ));   //創建一個新的結點

  if(new_node == NULL)    //檢查分配空間  {   printf("malloc error!/n");   exit(-1);  }

  new_node -> num = i + 1;  //賦值  scanf("%s", new_node -> name);

  //      insert_node_head(&head, new_node);  insert_node_tail(&head, new_node); }

// display_link(head); //輸出/* num = number_link(head);               //返回結點數 printf("number = %d/n", num);

 printf("Please input the num, find the name:/n"); scanf("%d",&n); printf("%s/n",find_link(head, n) -> name);           // 輸出查找號對應的名字 printf("/n");

 printf("Please input the number of delete:/n"); scanf("%d",&number);    delete_node (&head, number);       //刪除其中一個結點

 flashback_link(&head);      //倒敘輸出*/ 

 enter_node = (Link)malloc(sizeof(Node)); enter_node -> num = i + 1; printf("Please input the name:/n"); scanf("%s",enter_node -> name); printf("Please input the number of enter:/n"); scanf("%d",&number); enter_link(&head, enter_node, number);    //在已經輸入的結點里再插入一個新的結點

 display_link(head); //輸出

 release_link (&head); //釋放     display_link(head);

    return 0;}


上一篇:計算組合數

下一篇:poj1493

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 商城县| 昌邑市| 象山县| 建阳市| 德清县| 察雅县| 依兰县| 横峰县| 阿拉善右旗| 虞城县| 长白| 延津县| 金川县| 安远县| 大竹县| 阳江市| 舞钢市| 车致| 杭锦后旗| 铜山县| 繁峙县| 常宁市| 田阳县| 天水市| 周宁县| 德令哈市| 沐川县| 雅安市| 六枝特区| 屏东县| 招远市| 英超| 偏关县| 克什克腾旗| 甘南县| 恩施市| 滕州市| 北流市| 阳新县| 永川市| 平度市|