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

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

單向鏈表例題

2019-11-10 16:54:53
字體:
供稿:網(wǎng)友


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

struct node        //定義結(jié)點(diǎn)的結(jié)構(gòu)體{ int num; char name[100];

 struct node *next;};

typedef struct node Node;    //將struct node簡(jiǎn)單定義為Nodetypedef struct node *Link;    //將stcuct node類型定義為*Link

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

void insert_node_head(Link * head, Link new_node) //插入新的結(jié)點(diǎn)(頭插)(插哪,哪個(gè)結(jié)點(diǎn)){ 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;     //下一個(gè) }}

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)      //刪除其中一個(gè)結(jié)點(diǎn){    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)         //計(jì)算鏈表長(zhǎng)度并返回{ Link p; p = head; int num = 0;

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

 return num;

}

Link find_link (Link  head, int n)        //查找對(duì)應(yīng)學(xué)號(hào)所在結(jié)點(diǎn)內(nèi)容{ 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)   //插入新的結(jié)點(diǎn){    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 ));   //創(chuàng)建一個(gè)新的結(jié)點(diǎn)

  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);               //返回結(jié)點(diǎn)數(shù) 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);           // 輸出查找號(hào)對(duì)應(yīng)的名字 printf("/n");

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

 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);    //在已經(jīng)輸入的結(jié)點(diǎn)里再插入一個(gè)新的結(jié)點(diǎn)

 display_link(head); //輸出

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

    return 0;}


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 贡嘎县| 内黄县| 广元市| 朝阳县| 封开县| 襄樊市| 娄底市| 邮箱| 南部县| 固安县| 江油市| 彭水| 普陀区| 怀化市| 湾仔区| 江津市| 鸡泽县| 卓资县| 菏泽市| 伊春市| 栾城县| 麻阳| 错那县| 华容县| 太仓市| 城步| 临安市| 泸西县| 颍上县| 新河县| 晋宁县| 岳阳县| 聂拉木县| 漳浦县| 天全县| 天柱县| 宜昌市| 宝清县| 澄城县| 张掖市| 郓城县|