zoukankan      html  css  js  c++  java
  • 线性表链式结构基本操作的实现

    2018-11-10-15:10:42

      1 /*********************************************************
      2     创建一个带头结点的单链表,并实现其增删合并和打印等基本操作。
      3     main函数操作:
      4         1.输入第一个链表的元素个数,以及具体元素。
      5         2.打印该链表。
      6         3.输入需要插入在某个位置的值。
      7         4.打印插入后的链表。
      8         5.输入需要删除元素在链表中的位置。
      9         6.打印删除元素后的链表。
     10         7.输入第二个链表的元素个数,以及具体元素。
     11         8.返回二继续执行上述2-6步骤并在第六个步骤完成时跳出。
     12         9.将两个链表合并。
     13         10.打印合并后的链表。
     14 **********************************************************/
     15 #include <cstdio>
     16 #include <cstdlib>
     17 #include <iostream>
     18 using namespace std;
     19 
     20 typedef int Elemtype;
     21 typedef struct node{
     22     int length;//用头结点储存链表的当前长度
     23     Elemtype Date;
     24     struct node*Next;
     25 }Node,*LinkList;
     26 
     27 LinkList InitNode();
     28 LinkList InsertNode(LinkList Head,Elemtype elem,int aidelem_locate);
     29 LinkList DeleteNode(LinkList Head,Elemtype *elem,int aidelem_locate);
     30 LinkList MergeList(LinkList&Head1,LinkList&Head2);
     31 void Printlist(LinkList Head);
     32 //main函数内所有数据均为测试数据,读者可根据自己测试方式自行调换
     33 int main()
     34 {
     35     LinkList Head1,Head2;
     36     Head1=InitNode();
     37     cout<<"List 1 : "<<endl;
     38     int Maxnumber1;
     39     Elemtype elem1;
     40     cin>>Maxnumber1;
     41     for(int i=1;i<=Maxnumber1;i++){
     42         cin>>elem1;
     43         InsertNode(Head1,elem1,i);
     44     }
     45     Printlist(Head1);
     46     Elemtype elem2;
     47     int index1;
     48     cin>>elem2>>index1;
     49     InsertNode(Head1,elem2,index1);
     50     Printlist(Head1);
     51     int elem3,index2;
     52     cin>>index2;
     53     DeleteNode(Head1,&elem3,index2);
     54     cout<<"Delete date is in ListHead1 is "<<elem3<<endl;
     55     Printlist(Head1);
     56 
     57     cout<<"List 2 : "<<endl;
     58     Head2=InitNode();
     59     int Maxnumber2;
     60     Elemtype elem4;
     61     cin>>Maxnumber2;
     62     for(int i=1;i<=Maxnumber2;i++){
     63         cin>>elem4;
     64         InsertNode(Head2,elem4,i);
     65     }
     66     Printlist(Head2);
     67     Elemtype elem5;
     68     int index3;
     69     cin>>elem5>>index3;
     70     InsertNode(Head2,elem5,index3);
     71     Printlist(Head2);
     72     int elem6,index4;
     73     cin>>index4;
     74     DeleteNode(Head2,&elem6,index4);
     75     cout<<"Delete date in ListHead2 is "<<elem6<<endl;
     76     Printlist(Head2);
     77     char c;
     78     cout<<"Are you sure you want to merge the two lists above?"<<endl<<"input Y or N "<<endl;
     79     cin>>c;
     80     if(c=='Y'){
     81         LinkList Merge;
     82         Merge=MergeList(Head1,Head2);
     83         Printlist(Merge);
     84     }
     85     return 0;
     86 }
     87 
     88 LinkList InitNode(){
     89     LinkList Head;
     90     Head=(LinkList)malloc(sizeof(Node));
     91     Head->Next=NULL;
     92     Head->length=0;
     93     return Head;
     94 }
     95 
     96 LinkList InsertNode(LinkList Head,Elemtype elem,int aidelem_locate){
     97     if(Head->Next==NULL){
     98         LinkList q;
     99         q=(LinkList)malloc(sizeof(Node));
    100         Head->Next=q;
    101         q->Date=elem;
    102         q->Next=NULL;
    103         Head->length++;
    104         return Head;
    105     }
    106     else if(aidelem_locate==Head->length+1){
    107         LinkList q,p;
    108         for(q=Head->Next;q->Next;q=q->Next);
    109         p=(LinkList)malloc(sizeof(Node));
    110         q->Next=p;
    111         p->Next=NULL;
    112         p->Date=elem;
    113         Head->length++;
    114         return Head;
    115     }
    116     else{
    117         if(aidelem_locate<=Head->length){
    118             int i;
    119             LinkList p,q;
    120             for(q=Head->Next,i=1;i<aidelem_locate-1;q=q->Next,i++);
    121             if(aidelem_locate==1)
    122                 q=Head;
    123             p=(LinkList)malloc(sizeof(Node));
    124             p->Next=q->Next;
    125             q->Next=p;
    126             p->Date=elem;
    127             Head->length++;
    128             return Head;
    129         }
    130         else    return Head;
    131     }
    132 }
    133 
    134 LinkList DeleteNode(LinkList Head,Elemtype*elem,int aidelem_locate){
    135     if(aidelem_locate==1){
    136       LinkList p,q;
    137       q=Head->Next;
    138       *elem=q->Date;
    139       p=Head->Next->Next;
    140       Head->Next=p;
    141       free(q);
    142       return Head;
    143     }
    144     else if(aidelem_locate==Head->length){
    145       int i;
    146       LinkList q;
    147       for(q=Head->Next,i=1;i<aidelem_locate-1;q=q->Next,i++);
    148       *elem=q->Date;
    149         LinkList p=q->Next;
    150       q->Next=NULL;
    151       free(p);
    152       return Head;
    153     }
    154     else{
    155       int i;
    156       LinkList q;
    157       for(q=Head->Next,i=1;i<aidelem_locate-1;q=q->Next,i++);
    158       *elem=q->Date;
    159       q->Next=q->Next->Next;
    160       return Head;
    161     }
    162 }
    163 
    164 LinkList MergeList(LinkList&Head1,LinkList&Head2){
    165     LinkList pa,pb,pc,Merge;
    166     pa=Head1->Next;
    167     pb=Head2->Next;
    168     Merge=pc=Head1;
    169     while(pa&&pb){
    170         if(pa->Date<=pb->Date){
    171             pc->Next=pa;pc=pa;pa=pa->Next;
    172         }
    173         else{
    174             pc->Next=pb;pc=pb;pb=pb->Next;
    175         }
    176         pc->Next=pa?pa:pb;
    177         free(Head2);
    178     }
    179     return Merge;
    180 }
    181 
    182 void Printlist(LinkList Head){
    183     LinkList p;
    184     int flag;
    185     for(p=Head->Next,flag=1;p;p=p->Next,flag++){
    186         printf("%d	",p->Date);
    187         if(Head->length%5!=0&&flag%5==0)
    188             cout<<endl;
    189     }
    190     cout<<endl;
    191 }
    192 /****************************************
    193     Author:CRUEL_KING
    194     Time:2018/11/9
    195     Program name:带头结点的单链表基本操作的实现.cpp
    196 ****************************************/
  • 相关阅读:
    梅森素数
    高精度乘法
    快速幂取模
    高精度加法
    Linux 压缩&解压缩
    Lec_Cloud资源云平台
    IP102,IP102-K_V3.0 输入节点机
    A7互动主机
    音频处理器的使用
    关于测试随笔
  • 原文地址:https://www.cnblogs.com/bianjunting/p/9932530.html
Copyright © 2011-2022 走看看