【数据结构】 线性表 的 链式存储结构

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 
  4 typedef struct LinkList {
  5     int data;
  6     LinkList *next;
  7 
  8 }LinkList , *linklist;
  9 //创建头结点 
 10 int CreateList(linklist &L) {
 11     L = (linklist)malloc(sizeof(LinkList));
 12     if(!L)
 13     exit(0);
 14     L->next = NULL;
 15     L->data = 0; 
 16 }
 17 //尾插法 
 18 int PushBack(linklist &L) {
 19     linklist L1 = NULL;
 20     L1 = L ;
 21     char c = 'N';
 22     for( ; ; ){
 23     linklist q = NULL;
 24     CreateList(q);
 25     printf("请输入元素\n");
 26     scanf("%d" , &(q->data));
 27     L1->next = q ;
 28     L1= q ;
 29     fflush(stdin);
 30     printf("是否继续输入Y/N");
 31     scanf("%c" , &c);
 32     fflush(stdin);
 33     if(c != 'Y')
 34     return 0;
 35     }
 36 }
 37 //头插法 
 38 int PushFront(linklist &L) {    
 39     char c = 'N';
 40     linklist p = NULL ;
 41 //    L1 = L ;
 42     p = L;
 43     for( ; ; ){
 44     linklist q = NULL ;
 45     CreateList(q);
 46     printf("请输入元素\n");
 47     scanf("%d" ,  &(q->data));
 48     p = L->next;
 49     L->next = q ;
 50     q->next = p ;
 51     fflush(stdin);
 52     printf("是否继续输入Y/N");
 53     scanf("%c" , &c);
 54     fflush(stdin);
 55     if(c != 'Y')
 56     return 0;    
 57     }
 58 }
 59 //输出所有元素 
 60 void PrintfList(linklist &L) {
 61     linklist L1 = L ; 
 62     while(L1->next != NULL)
 63     {
 64     L1 = L1->next;
 65     printf("///%d///" , L1->data);
 66     }
 67     
 68 }
 69 
 70 int deleteList(linklist &L , int n) {
 71     if(L->next == NULL)
 72     return 0 ;
 73     linklist L1 = L ;
 74     while(L1->next->data != n)
 75         L1 = L1->next;
 76     L1->next = L1->next->next;
 77         
 78 }
 79 //两个有序链表归并 
 80 LinkList *MergeList(linklist &La , linklist &Lb ) {
 81     linklist L = NULL , l = NULL, la = La->next , lb = Lb->next;
 82     CreateList(L);
 83     l = L;
 84     while(lb && la){
 85     if(la->data >= lb->data){
 86         l->next = la ;
 87         l = l->next;
 88         la = la -> next;
 89     }
 90     else{
 91         l -> next = lb;
 92         l = l->next;
 93         lb = lb -> next;
 94     }
 95     }
 96     l->next = lb ? lb : la  ;   
 97     return L ;
 98 }
 99 //插入元素 
100 int insertList(linklist &L , int n ,int data) {
101     linklist L1 = L , q ;
102     for(int i = 0 ; i < n , L1->next!=NULL ; i++ )
103     {
104         if(i = n-1)
105         {
106             CreateList(q);
107             q ->data = data ;
108             q->next = L1->next;
109             L1->next = q;
110             return n;    
111         }
112         L1 = L1 -> next;
113     }
114     return 0;
115 }
116 int main() {
117     LinkList *q = NULL , *p = NULL ,*L = NULL;
118     CreateList(q);
119     PushFront(q);
120     PrintfList(q);
121     printf("\n");
122     CreateList(p);
123     PushFront(p);
124     PrintfList(p);
125     L = MergeList(q , p );
126     printf("\n");
127     PrintfList(L);
128 //    deleteList(q , 3);
129 //    PrintfList(q);
130     
131 } 

猜你喜欢

转载自www.cnblogs.com/duolaAbao/p/9426639.html