zoukankan      html  css  js  c++  java
  • ZT C语言链表操作(新增单向链表的逆序建立)

    这个不好懂,不如看 转贴:C语言链表基本操作http://www.cnblogs.com/jeanschen/p/3542668.html

    ZT 链表逆序http://www.cnblogs.com/jeanschen/p/3538966.html

     

    C语言链表操作(新增单向链表的逆序建立)

    分类: C/C++ 1017人阅读 评论(0) 收藏 举报
    众所周知,链表是数据结构的基础,掌握链表很重要http://blog.csdn.net/liushuaikobe/article/details/6785964
    1. #include <stdio.h>  
    2. #include <stdlib.h>  
    3.   
    4. typedef struct NODE  
    5. {  
    6.     int e;  
    7.     struct NODE *next;  
    8. }node, *LinkList;  
    9.   
    10. LinkList build_linklist()  
    11. {  
    12.     FILE *fp;  
    13.     if ((fp=fopen("number.txt","r"))==NULL)  
    14.     {  
    15.         printf("Can not open the file!");  
    16.         exit (1);  
    17.     }  
    18.     int t;  
    19.     LinkList r,p,head=NULL;  
    20.     while (fscanf(fp,"%d",&t)>0)  
    21.     {  
    22.         p=(LinkList)malloc(sizeof(node));  
    23.         p->e=t;  
    24.         p->next=NULL;  
    25.         if (!head)  
    26.             head=p;  
    27.         else  
    28.             r->next=p;  
    29.         r=p;  
    30.     }  
    31.     return head;  
    32. }  
    33.   
    34. void search(LinkList head,int toSearch)  
    35. {  
    36.     int count=0;  
    37.     int flag=0;  
    38.     LinkList r=head;  
    39.     while (r!=NULL)  
    40.     {  
    41.         count++;  
    42.         if (r->e==toSearch)  
    43.         {  
    44.             printf("已经找到该元素,在第%d个位置 ",count);  
    45.             flag=1;  
    46.             break;  
    47.         }  
    48.         r=r->next;  
    49.     }  
    50.     if (!flag)  
    51.         printf("没有找到该元素! ");  
    52. }  
    53.   
    54. void del(LinkList *head,int toDel)  
    55. {  
    56.     if (!(*head))  
    57.     {  
    58.         printf("请先创建链表! ");  
    59.         return ;  
    60.     }  
    61.     LinkList r=*head;  
    62.     LinkList p=NULL;  
    63.     int flag=0;  
    64.     while (r!=NULL)  
    65.     {  
    66.         if ((r==*head)&&(r->e==toDel))  
    67.         {  
    68.             (*head)=(*head)->next;  
    69.             flag=1;  
    70.             break;  
    71.         }  
    72.         if ((r!=*head)&&(r->e==toDel))  
    73.         {  
    74.             flag=1;  
    75.             for (p=*head;p!=NULL;p=p->next)  
    76.             {  
    77.                 if (p->next==r)  
    78.                 {  
    79.                     break;  
    80.                 }  
    81.             }  
    82.             p->next=r->next;  
    83.             free(r);  
    84.             break;  
    85.         }  
    86.         r=r->next;  
    87.     }  
    88.     if (!flag)  
    89.         printf("未找到该元素! ");  
    90. }  
    91.   
    92. void insert(LinkList head,int n,int toInsert)  
    93. {  
    94.     if (!head)  
    95.     {  
    96.         printf("请先创建链表!");  
    97.         return ;  
    98.     }  
    99.     int count=0;  
    100.     LinkList p=head;  
    101.     while (p!=NULL)  
    102.     {  
    103.         if ((count++)==n)  
    104.         {  
    105.             LinkList r=(LinkList)malloc(sizeof(node));  
    106.             r->e=toInsert;  
    107.             r->next=p->next;  
    108.             p->next=r;  
    109.             break;  
    110.         }  
    111.         p=p->next;  
    112.     }  
    113. }  
    114.   
    115. int getLengh(LinkList head)  
    116. {  
    117.     LinkList p=head;  
    118.     int i=0;  
    119.     while (p!=NULL)  
    120.     {  
    121.         i++;  
    122.         p=p->next;  
    123.     }  
    124.     return i;  
    125. }  
    126.   
    127. void show(LinkList head)  
    128. {  
    129.     LinkList p=head;  
    130.     while (p!=NULL)  
    131.     {  
    132.         printf("%d  ",p->e);  
    133.         p=p->next;  
    134.     }  
    135.     printf(" ");  
    136. }  
    137.   
    138. void rebuild(LinkList *head)  
    139. {  
    140.     LinkList r,p;  
    141.     p=(*head)->next;  
    142.     r=p->next;  
    143.     (*head)->next=NULL;  
    144.     while(p!=NULL)  
    145.     {  
    146.         p->next=*head;  
    147.         *head=p;  
    148.         p=r;  
    149.         if (r==NULL)  
    150.             continue;  
    151.         else  
    152.             r=r->next;  
    153.     }  
    154. }  
    155.   
    156. void sort_linklist(LinkList head)  
    157. {  
    158.     LinkList r,p;  
    159.     int temp=0;  
    160.     for (r=head;r->next!=NULL;r=r->next)  
    161.      for (p=r->next;p!=NULL;p=p->next)  
    162.          if ((r->e)>(p->e))  
    163.          {  
    164.              temp=r->e;  
    165.              r->e=p->e;  
    166.              p->e=temp;  
    167.          }  
    168. }  
    169.   
    170. int main()  
    171. {  
    172.     LinkList head=build_linklist();  
    173.     printf("链表已建立!原链表: ");  
    174.     show(head);  
    175.     sort_linklist(head);  
    176.     printf("链表已经按照从小到大的顺序排好!排序后: ");  
    177.     show(head);  
    178.     printf(" ");  
    179.     int c=0;  
    180.     while (1)  
    181.     {  
    182.         printf("1.查找指定元素 ");  
    183.         printf("2.插入一个给定元素 ");  
    184.         printf("3.删除一个指定元素 ");  
    185.         printf("4.统计链表的长度 ");  
    186.         printf("5.输出线性链表 ");  
    187.         printf("6.实现安逆序链表的重建 ");  
    188.         printf("请选择:");  
    189.         scanf("%d",&c);  
    190.         switch (c)  
    191.         {  
    192.             case 1:  
    193.             {  
    194.                 printf("请输入要查找的元素:");  
    195.                 int t;  
    196.                 scanf("%d",&t);  
    197.                 search(head,t);  
    198.                 printf(" ");  
    199.                 break;  
    200.             }  
    201.             case 2:  
    202.             {  
    203.                 printf("请输入要插入的元素的值:");  
    204.                 int toi;  
    205.                 scanf("%d",&toi);  
    206.                 printf("请输入要插入的位置:");  
    207.                 int position;  
    208.                 scanf("%d",&position);  
    209.                 insert(head,position,toi);  
    210.                 printf(" ");  
    211.                 break;  
    212.             }  
    213.             case 3:  
    214.             {  
    215.                  printf("请输入要删除的元素的值:");  
    216.                  int tod;  
    217.                  scanf("%d",&tod);  
    218.                  del(&head,tod);  
    219.                  printf(" ");  
    220.                  break;  
    221.             }  
    222.             case 4:  
    223.             {  
    224.                 printf("链表的长度是:%d ",getLengh(head));  
    225.                 printf(" ");  
    226.                 break;  
    227.             }  
    228.             case 5:  
    229.             {  
    230.                 show(head);  
    231.                 printf(" ");  
    232.                 break;  
    233.             }  
    234.             case 6:  
    235.             {  
    236.                 rebuild(&head);  
    237.                 show(head);  
    238.                 printf(" ");  
    239.                 break;  
    240.             }  
    241.             default:  
    242.             {  
    243.                 exit(0);  
    244.             }  
    245.         }  
    246.     }  
    247.     return 0;  
    248. }  
  • 相关阅读:
    深入解析Hibernate核心接口
    Hibernate基本原理
    深入hibernate的三种状态
    Hibernate commit() 和flush() 的区别
    Hibernate中的merge使用详情解说
    Record is locked by another user
    Vue路由router-link的使用
    Vue-router的基本使用
    Vue把父组件的方法传递给子组件调用(评论列表例子)
    Vue中子组件调用父组件的方法
  • 原文地址:https://www.cnblogs.com/jeanschen/p/3538817.html
Copyright © 2011-2022 走看看