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

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

單向鏈表例題

2019-11-09 20:30:05
字體:
供稿:網(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;}


上一篇:cpp13.2

下一篇:格里高歷日歷判斷閏年

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 滕州市| 台中县| 沙坪坝区| 台东县| 邢台市| 南和县| 孟津县| 鲜城| 沂南县| 凤城市| 浙江省| 类乌齐县| 乐昌市| 井研县| 肃南| 措勤县| 兰州市| 苗栗县| 大冶市| 上犹县| 潞城市| 万宁市| 盐池县| 化州市| 克什克腾旗| 屏山县| 凌云县| 灵丘县| 高淳县| 内江市| 盐边县| 若尔盖县| 历史| 大兴区| 屯门区| 那曲县| 松潘县| 泾川县| 永丰县| 宁津县| 登封市|