[C++] 单链表基本操作(增删改查,清空,求长度...) →→→→→进入此内容的聊天室

来自 , 2019-08-06, 写在 C++, 查看 108 次.
URL http://www.code666.cn/view/155fa095
  1. #include<iostream.h>
  2. #include<stdlib.h>
  3. typedef int elemtype;
  4. struct lnode
  5. {
  6.         elemtype data;
  7.         lnode *next;
  8. };
  9.  
  10. void initlist ( lnode *&hl )
  11. {
  12.         lnode *p=new lnode;
  13.         p->next=NULL;
  14.         hl=p;
  15.         hl->next=NULL;
  16. }
  17.  
  18. void clearlist ( lnode *&hl )
  19. {
  20.         lnode *p,*q;
  21.         p=hl->next;
  22.         while ( p!=NULL )
  23.         {
  24.                 q=p->next;
  25.                 delete p;
  26.                 p=q;
  27.         }
  28.         hl->next=NULL;
  29. }
  30.  
  31. int lissize ( lnode *hl )
  32. {
  33.         int i=0;
  34.         lnode *p=hl->next;
  35.         while ( p!=NULL )
  36.         {
  37.                 i++;
  38.                 p=p->next;
  39.         }
  40.         return i;
  41. }
  42.  
  43. int listempty ( lnode *hl )
  44. {
  45.         return hl->next==NULL;
  46. }
  47. elemtype getelem ( lnode *hl,int i )
  48. {
  49.         if ( i<1 )
  50.         {
  51.                 cerr<<"pos is out range!"<<endl;
  52.                 exit ( 1 );
  53.         }
  54.         lnode *p=hl->next;
  55.         int j=0;
  56.         while ( p!=NULL )
  57.         {
  58.                 j++;
  59.                 if ( j==i )
  60.                         break;
  61.                 p=p->next;
  62.         }
  63.         if ( p==NULL )
  64.         {
  65.                 cerr<<"pos is out range!"<<endl;
  66.                 exit ( 1 );
  67.         }
  68.         return ( p->data );
  69. }
  70.  
  71. void insertrear ( lnode *hl,elemtype x )
  72. {
  73.         lnode *q=new lnode;
  74.         q->data=x;
  75.         q->next=NULL;
  76.         lnode *p=hl;
  77.         while ( p->next!=NULL )
  78.                 p=p->next;
  79.         p->next=q;
  80. }
  81. void looklist ( lnode *hl )
  82. {
  83.         lnode *p=hl->next;
  84.         while ( p!=NULL )
  85.         {
  86.                 cout<<p->data<<"  ";
  87.                 p=p->next;
  88.         }
  89.         cout<<endl;
  90. }
  91.  
  92. int findlist ( lnode *hl,elemtype &x )
  93. {
  94.         lnode *p=hl->next;
  95.         while ( p!=NULL )
  96.                 if ( p->data==x )
  97.                 {
  98.                         x=p->data;
  99.                         return 1;
  100.                 }
  101.                 else
  102.                         p=p->next;
  103.         return 0;
  104. }
  105.  
  106. void insertlist ( lnode *hl,elemtype x,int i )
  107. {
  108.         if ( i<1 )
  109.         {
  110.                 cerr<<"pos is out range!"<<endl;
  111.                 exit ( 1 );
  112.         }
  113.         lnode *p,*q;
  114.         int j=0;
  115.         p=hl;
  116.         while ( p->next!=NULL )
  117.         {
  118.                 j++;
  119.                 if ( j==i )
  120.                         break;
  121.                 p=p->next;
  122.         }
  123.         if ( j==i )
  124.         {
  125.                 q=new lnode;
  126.                 q->data=x;
  127.                 q->next=p->next;
  128.                 p->next=q;
  129.         }
  130.         else
  131.         {
  132.                 cerr<<"pos is out range!"<<endl;
  133.                 exit ( 1 );
  134.         }
  135. }
  136.  
  137. void deletelist ( lnode *hl,int i )
  138. {
  139.         lnode *p=hl;
  140.         int j=0;
  141.         while ( p->next!=NULL&&j<i-1 )
  142.         {
  143.                 p=p->next;
  144.                 j++;
  145.         }
  146.         if ( j>i-1||p->next==NULL )
  147.         {
  148.                 cerr<<"error!"<<endl;
  149.                 exit ( 1 );
  150.         }
  151.         lnode *q=p->next;
  152.         p->next=q->next;
  153.         delete q;
  154. }
  155. void sortlist ( lnode *hl,int k )
  156. {
  157.         lnode *head=new lnode;
  158.         head->next=NULL;
  159.         head->data=hl->next->data;
  160.         for ( lnode *p=hl->next->next; p; p=p->next )
  161.         {
  162.                 lnode *q=new lnode;
  163.                 q->data=p->data;
  164.                 lnode *cp=head;
  165.                 lnode *ap=NULL;
  166.                 while ( cp )
  167.                 {
  168.                         if ( k==1 )
  169.                         {
  170.                                 if ( q->data<cp->data )
  171.                                         break;
  172.                                 else
  173.                                         { ap=cp;  cp=cp->next;}
  174.                         }
  175.                         else
  176.                         {
  177.                                 if ( q->data>cp->data )
  178.                                         break;
  179.                                 else
  180.                                         { ap=cp;  cp=cp->next;}
  181.                         }
  182.                 }
  183.                 if ( ap==NULL )
  184.                         { q->next=head; head=q;}
  185.                 else
  186.                         { q->next=cp; ap->next=q;}
  187.         }
  188.  
  189.         lnode *r=new lnode;
  190.         r->next=head;
  191.         head=r;
  192.         looklist ( head );
  193.         clearlist ( head );
  194. }
  195. void main( )
  196. {
  197.         lnode *hl;
  198.         initlist ( hl );
  199.         int i;
  200.         elemtype x;
  201.         cout<<"input in 5 num:";
  202.         for ( i=0; i<5; i++ )
  203.         {
  204.                 cin>>x;
  205.                 insertrear ( hl,x );
  206.         }
  207.         cout<<"input 2 num:";
  208.         cin>>x;
  209.         insertlist ( hl,x,1 );
  210.         cin>>x;
  211.         insertlist ( hl,x,1 );
  212.         looklist ( hl );
  213.         sortlist ( hl,1 );
  214.         sortlist ( hl,0 );
  215.  
  216. }
  217.  

回复 "单链表基本操作(增删改查,清空,求长度...)"

这儿你可以回复上面这条便签

captcha