• 课设2--线性表的操作


      1 #include "stdio.h"
      2 #include "malloc.h"
      3 #define datatype int
      4 typedef struct node
      5 { 
      6     datatype data;        //链表的数据域
      7     struct node *next;    //链表的指针域
      8 } LNode,*LinkList;
      9 
     10 LinkList Creat_LinkList1( ) //头插入法建立单链表算法
     11 {
     12     int i;  
     13     int x;
     14     int n;
     15     LNode *L;  
     16     L=(LNode *)malloc(sizeof(LNode));  
     17     L->next = NULL;
     18     printf("输入单链表的长度(头插法):");  
     19     scanf("%d",&n);
     20     printf("输入元素:");
     21     for(i=0;i<n;i++)  
     22     {  
     23         LNode *p;  
     24         p=(LNode *)malloc(sizeof(LNode));  
     25         scanf("%d",&x);  
     26         p->data = x;  
     27         p->next = L->next;  
     28         L->next = p;  
     29     }  
     30     return L;  
     31 }
     32 /*按序号查找 Get_Linklist(L,i)
     33 在单链表L中查找第i个元素结点,找到返回其指针,否则返回空*/
     34 LNode *Get_LinkList(LinkList L,int i)
     35 {  
     36     LNode *p;
     37     int j;
     38     if(L->next==NULL)
     39         return NULL;
     40         if(i<1)
     41             return NULL;
     42         j=0;
     43         p=L;
     44     while(p->next!=NULL&&j<i)
     45     {
     46         p=p->next;
     47         j++;
     48     }
     49     if(j==i)
     50         return p;
     51     else
     52         return NULL;
     53 }
     54 /*插入运算 Insert_LinkList(L,i,x)
     55 在单链表L的第i个位置上插入值为x的元素*/
     56 int  Insert_LinkList(LinkList  L, int i, datatype  x)     
     57 {
     58     LinkList p;
     59     LNode *s;
     60     int j;
     61     p=L;
     62     j=1;
     63     while(j<i){
     64         p=p->next;
     65         j++;
     66     }
     67     s=(LNode*)malloc(sizeof(LNode));
     68     s->data=x;
     69     s->next=p->next;
     70     p->next=s;
     71     return 1;
     72 }
     73 /*删除运算:Del_LinkList(L,i)
     74 删除单链表L上的第i个数据结点*/
     75 int  Del_LinkList(LinkList  L,int i)   
     76 {    
     77     int j;  
     78      LinkList p,q;  
     79      p=L;  
     80      j=1;  
     81      while(j<i)  
     82      {  
     83          p=p->next;  
     84          j++;  
     85      }  
     86      q=p->next;  
     87      p->next = p->next->next;  
     88      free(q);
     89      return 1;
     90 }
     91 void print(LinkList L)           //输出单链表
     92 {   LNode *p=L;
     93     p=L->next;
     94     while(p->next!=NULL)
     95     { printf("%d->",p->data);    //输出表中非最后一个元素
     96       p=p->next; 
     97     }
     98     printf("%d
    ",p->data);      //输出表中最后一个元素    
     99 }
    100 void linkcount(LinkList L)
    101 {
    102     struct a{
    103         int x;
    104         int y;
    105     }a[100];
    106     int m=0;
    107     LinkList p,q;
    108     p=(LinkList)malloc(sizeof(LNode));
    109     q=(LinkList)malloc(sizeof(LNode));
    110     while(L->next){
    111         a[m].x=L->next->data;
    112         a[m].y=1;
    113         p=L->next;
    114         while(p->next)
    115         {
    116             if(L->next->data==p->next->data)
    117             {
    118                 p->next=p->next->next;
    119                 a[m].y++;
    120             }
    121             else
    122             {
    123                 p=p->next;
    124             }
    125         } 
    126         m++;
    127         L=L->next;
    128     }
    129     printf("该链表中
    ");
    130     for(int i=0;i<m;i++){
    131         printf("%d出现%d次
    ",a[i].x,a[i].y);
    132     }
    133 } 
    134 
    135 void main()
    136 { 
    137     LinkList  H;
    138     int i,j,k;
    139     datatype x;
    140     do
    141     {  
    142     printf("
    
    
    
    ");
    143     printf("			 链表子系统
    ");
    144     printf("		*******************************
    ");
    145     printf("		*        1----建    表     *
    ");
    146     printf("		*        2----插    入    *
    ");
    147     printf("		*        3----删  除    *
    ");
    148     printf("		*        4----查  找    *
    ");
    149     printf("		*        5----显  示    *
    ");
    150     printf("		*        6----计    数    *
    ");
    151     printf("		*        0----返  回    *
    ");
    152     printf("		*******************************
    ");
    153     printf("		 请选择菜单项(0-5):");
    154     scanf("%d",&k);getchar();
    155     if (k==1)
    156         H=Creat_LinkList1( );      //用头插入法建立单链表
    157     else if (k==2)       //在线性表第i位置处插入值为X的元素
    158     {
    159         printf("
       请输入插入的位置i和数据X(输入格式:i,X):");
    160         scanf("%d,%d",&i,&x);
    161         j=Insert_LinkList(H,i,x);
    162     }
    163     else if (k==3)
    164     {    printf("
       请输入要删除元素的位置i:");
    165         scanf("%d",&i);
    166         j=Del_LinkList(H,i);
    167         if (j == 1) printf("删除成功!!");
    168         else printf("删除失败!!");        
    169     }
    170     else if(k==4)       //查找线性表中元素值为x的位置
    171     {    
    172         LNode *p;
    173         printf("
       请输入要查找的序号i:");
    174         scanf("%d",&i);
    175         p=Get_LinkList(H,i);
    176         if (p!=NULL)
    177         { print(H);printf("中序号为i的地址是 %d ",p);}
    178         else
    179         printf("链表中无此序号!!
    ");
    180     }
    181      else if (k==5)        //输出链表
    182      {    printf("
    表的存储顺序为:");
    183         print(H);  
    184     }
    185     else if (k==6)        //
    186      {    printf("
    计数:");
    187         linkcount(H);  
    188     }
    189     }while(k!=0);
    190 }

    部分运行结果:

    不经一番彻骨寒,哪有梅花扑鼻香?
  • 相关阅读:
    reorder-list
    HMM基础
    binary-tree-preorder-traversal
    binary-tree-postorder-traversal
    GMM基础
    (七)打印机驱动设置—认识打印机接口
    (八)打印机驱动设置—串口的设置
    (五)打印机驱动设置—没有开不了的钱箱
    (六)打印机驱动设置—装完驱动后没有打印机图标
    (四)揭开打印机驱动的神秘面纱
  • 原文地址:https://www.cnblogs.com/zongyao/p/9255348.html
Copyright © 2020-2023  润新知