| 
 | 
 
 
发表于 2020-11-17 17:55:25
|
显示全部楼层
 
 
 
- #include <stdio.h>
 
 - #include <stdlib.h>
 
  
- typedef int ElemType;
 
 - //关于ElemType:它是element type(“元素的类型”)的简化体。
 
 - //可以是任何数据类型,这里是int型  
 
  
- typedef struct Node
 
 - {
 
 -         int data;
 
 -         struct Node * next;
 
 - } Node ;
 
  
- typedef struct Node* LinkList;
 
 - //link:链接    list:目录
 
  
- void GetElem (LinkList L , int i , int * e)
 
 - {
 
 -         int k                                                                              ;
 
 -         LinkList p                                                                         ;
 
 -         * e = -1                                                                           ;
 
 -         if(L && i > 0) {
 
 -                 for(k = 1 , p = L ; p -> next && k < i ; k ++ , p = p -> next)             ;
 
 -                 if(k == i) * e = p -> data                                                 ;
 
 -         }
 
 - }
 
  
- void ListInsert(LinkList L , int i , int e)
 
 - {
 
 -         int k                                                                              ;
 
 -         LinkList p , r                                                                     ;
 
 -         if(L && i > 0) {
 
 -                 for(k = 1 , r = L ; r -> next && k < i ; k ++ , r = r -> next)             ;
 
 -                 p = (LinkList) malloc(sizeof(Node))                                        ;
 
 -                 p -> data = r -> data                                                      ;
 
 -                 p -> next = r -> next                                                      ;
 
 -                 r -> data = e                                                              ;
 
 -                 r -> next = p                                                              ;
 
 -         }
 
 - }
 
  
- LinkList ListDelete(LinkList L , int i , int * e)
 
 - {
 
 -         int k                                                                              ;
 
 -         LinkList h , p , r                                                                 ;
 
 -         * e = -1                                                                           ;
 
 -         h = L                                                                              ;
 
 -         if(L && i > 0) {
 
 -                 for(p = r = L , k = 1 ; p -> next && k < i ; r = p , p = p -> next , k ++) ;
 
 -                 if(k == i) {
 
 -                         * e = p -> data                                                    ;
 
 -                         if(p == L) h = p -> next                                           ;
 
 -                         else r -> next = p -> next                                         ;
 
 -                         free(p)                                                            ;
 
 -                 }
 
 -         }
 
 -         return h                                                                           ;
 
 - }
 
  
- void CreateListHead(LinkList * L , int number)
 
 - {
 
 -         LinkList h , p , r                          ;
 
 -         int i                                       ;
 
 -         for(i = 0 ; i < number ; i ++ )
 
 -         {
 
 -                 p = (LinkList) malloc(sizeof(Node)) ;
 
 -                 p -> next = NULL                    ;
 
 -                 scanf("%d" , & p -> data)           ;
 
 -                 if(! i) h = p                       ;
 
 -                 else r -> next = p                  ;
 
 -                 r = p                               ;
 
 -         }
 
 -         * L = h                                     ;
 
 - }
 
  
- void ShowList(LinkList L)
 
 - {
 
 -         if(L) {
 
 -                 printf("%d" , L -> data)                                           ;
 
 -                 for(L = L -> next ; L ; L = L -> next) printf(" , %d" , L -> data) ;
 
 -                 printf("\n\n")                                                     ;
 
 -         } else {
 
 -                 printf("链表为空。\n")                                             ;
 
 -         }
 
 - }
 
  
- int main(void)
 
 - {
 
 -         LinkList L                  ;
 
 -         int e                       ;
 
 -         CreateListHead(& L ,3)      ;
 
 -         ShowList(L)                 ;
 
 -         ListInsert(L , 3 , 404)     ;
 
 -         ShowList(L)                 ;
 
 -         ListInsert(L , 1 , 808)     ;
 
 -         ShowList(L)                 ;
 
 -         L = ListDelete(L , 3 , & e) ;
 
 -         ShowList(L)                 ;
 
 -         L = ListDelete(L , 1 , & e) ;
 
 -         ShowList(L)                 ;
 
 - }
 
  复制代码 
        编译、运行实况: 
- D:\0002.Exercise\C>g++ -o x x.c
 
  
- D:\0002.Exercise\C>x
 
 - 101
 
 - 202
 
 - 303
 
 - 101 , 202 , 303
 
  
- 101 , 202 , 404 , 303
 
  
- 808 , 101 , 202 , 404 , 303
 
  
- 808 , 101 , 404 , 303
 
  
- 101 , 404 , 303
 
  
 
- D:\0002.Exercise\C>
 
  复制代码 |   
 
 
 
 |