数据结构之单链表 头插与尾插法


1.定义一个数组,把1 2 3 4赋值给这个数组

2.建立一个新的头结点

3.头插与尾插

(因为前期C语言基础没打牢固,在写这个代码时,真的遇见了很多问题,导致我有几天心情都不是太好,因为老是陷进一个死循环啊!!!特别是 指针的使用,把所有函数堆在一起后,完全分不清了,而数据结构的重点又在于指针,所以准备重温函数的调用,指针与数组了。。。)

敲代碼前,頭腦一定要清晰!!!

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 typedef int Elemtype;  4 typedef struct Node{  5  Elemtype data;  6     struct Node *link;  7 }linknode,*linklist;  8 
 9     //初始化 
10     void initlist(linklist first){ 11     first=(linknode*)malloc(sizeof(linknode)); 12     if(!first) { 13         printf("\nerror!"); 14  } 15     first->link=NULL; 16  } 17     
18     //头插法建立单链表
19     void headinsert(linklist first,Elemtype a[4]){ 20     first->link=NULL; 21     int i; 22     for(i=3;i>=0;i--){ 23         linknode* s=(linknode*)malloc(sizeof(linknode));//给数组建立一个新的结点 
24         s->data=a[i];//将数组内容赋值给结点的数据域 
25         s->link=first->link;//将頭結點的指針域 NULL賦給結點s,使其成爲終端節點 
26         first->link=s;//頭結點指向s,使s成爲首元結點,依此類推 
27  } 28  } 29 
30     //尾插法建立单链表
31     void TailCreatList(linklist first,Elemtype a[4]) { 32     int i; 33     linknode *r;//新建一個結點 
34     r = first; //r指向了头节点,此时的头节点是终端节点,r始终指向L的终端节点
35     for (i=0;i<4;i++) { 36         linknode *s = (linknode*) malloc(sizeof(linknode));//s指向新申请的节点
37         s->data = a[i]; //用新节点的数据域来接受i
38         r->link = s; //用r来接纳新节点
39         r = s; //r指向终端节点
40  } 41     r->link = NULL; //元素已经全部装入链表L中,L的终端节点指针域为NULL,L建立完成
42 } 43     
44     //打印节点
45     void DisPlay(linklist L) { 46     if (L == NULL){ 47         return; 48  } 49     linknode *p = L->link; 50          while (p != NULL) { 51         printf("%d\n", p->data); 52         p = p->link; 53  } 54     printf("\n"); 55 } 56 
57 int main(){ 58     int b[4]={1,2,3,4}; 59     linknode *L1, *L2; 60     L1 = ( linknode*) malloc(sizeof(linknode)); 61     L2= ( linknode*) malloc(sizeof(linknode)); 62  headinsert(L1,b); 63  DisPlay(L1); 64  TailCreatList(L2,b); 65  DisPlay(L2); 66 }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM