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 }