最近期末了,时间宝贵啊!!!高数是磨我的小妖精~~~

之前学过链表,但是没实现过,最近上C语言课开始讲链表了,所以我还是实现了一下。

链表的前提便是struct,在我的想法里,链表就是结构体的嵌套,是我们最开始的基础数据结构之一,其构成便是数据域与指针域,正因为开辟了指针域,所以链表比数组的缺点就是耗空间。

下面是单链表的实现代码,双链表期末后找时间写。

最近编译器被我玩坏了,先用C写,C++其实也一样,里面的输出语句就是我调试时的标志。

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 
  4 typedef struct node{
  5     int data;
  6     struct node *next; //C++可以不加struct 
  7 }node;
  8 
  9 node* initlist (int num){
 10     node *head = NULL;
 11     head = (node*)malloc(sizeof(struct node));
 12     head->data = num;
 13     head->next = NULL; 
 14     printf("init link-list OK!\n");
 15     return head;
 16 }
 17 
 18 
 19 void addelement(node *list,int num){
 20     node* tpre = list;
 21     while(tpre->next!=NULL)
 22         tpre = tpre->next;
 23     tpre->next = (node*)malloc(sizeof(struct node));
 24     tpre = tpre->next;
 25     tpre->data = num;
 26     tpre->next = NULL;
 27     printf("Add num:%d OK !\n",num);
 28     return ;
 29 }
 30 
 31 void delete_element(node *list,int num){
 32     node *tpre = NULL;
 33     node *tnow = list;
 34     while(tnow!=NULL){
 35         if(tnow->data==num){
 36             node *temp = tnow;
 37             tnow = tnow->next;
 38             free(temp);
 39             tpre->next = tnow;
 40             printf("delete %d OK!\n",num);
 41             return;
 42         }
 43         tpre = tnow;
 44         tnow = tnow->next;
 45     }
 46     printf("DEL Data:%d Erorr !\n",num);
 47     return ;
 48 }
 49 
 50 void changevalue(node *list,int num,int cnum){
 51     node *tnext = list;
 52     while(tnext != NULL){
 53         if(tnext->data==num){
 54             tnext->data = cnum;
 55             printf("Change data: %d to %d OK!\n",num,cnum);
 56             return;
 57         }
 58         tnext = tnext->next;
 59     }  
 60     printf("CHA Data: %d to %d Erorr !\n",num,cnum);
 61     return;
 62 }
 63 
 64 void freelinklist(node *list){
 65     node *tre = list;
 66     node *tnext = list->next;
 67     while(tnext != NULL){
 68         tnext = tnext->next;
 69         free(tre);
 70         tre = tnext; 
 71     }
 72     printf("FREE OK!\n");
 73     return ;
 74 }
 75 
 76 void showlinklist(node *list){
 77     node *tpre = list;
 78     while(tpre->next != NULL){
 79         printf("%d ",tpre->data);
 80         tpre = tpre->next;
 81     }
 82     printf("%d #\n",tpre->data);
 83     printf("Showing-Finish!\n");
 84     return ;
 85 }
 86 
 87 int main(){
 88     node *list = initlist(1);
 89     addelement(list,2);
 90     addelement(list,3);
 91     addelement(list,4);
 92     addelement(list,5);
 93     addelement(list,6);
 94     changevalue(list,6,7);
 95     changevalue(list,6,8);
 96     delete_element(list,3);
 97     delete_element(list,9);
 98     showlinklist(list);
 99     freelinklist(list);
100     return 0;
101 }