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

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 }

 

posted @ 2019-04-10 20:13  软件工程七班王可欣  阅读(1138)  评论(0)    收藏  举报