C语言数据结构の单链表

实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <stdio.h>
#include <stdlib.h> // 声明exit函数

/* 单节点的数据结构 16个字节 */
typedef struct Node
{
int data; //数据域
struct Node * pNext; //指针域
}NODE,*PNODE;

//函数声明
PNODE createLinkList(void); //创建链表的函数
void traverseLinkList(PNODE pHead); //遍历链表的函数

/**
* 主函数入口 main
*/
void main()
{
PNODE pHead = NULL;
pHead = createLinkList();
traverseLinkList(pHead);
}

/**
* 创建链表
*/
PNODE createLinkList(void)
{
int length;
int i;
int value;

// 申请内存空间,头结点
PNODE phead = (PNODE)malloc(sizeof(NODE));
if(NULL == phead)
{
printf("内存分配失败,程序退出!\n");
exit(-1);
}

// 尾节点
PNODE pend = phead; // pend始终指向尾节点
pend->pNext = NULL; // 单链表尾节点指针域为NULL

printf("请输入链表的长度,len =");
scanf("%d",&length);

// 创建链表长度
for(i= 0;i< length;i++){
printf("请输入第%d个节点的值 :",i);
scanf("%d",&value);
PNODE pNew =(PNODE)malloc(sizeof(NODE));
if(NULL == pNew)
{
printf("内存分配失败,程序退出!\n");
exit(-1);
}
pNew->data = value; // 把新值放入节点
pend->pNext = pNew; // 把尾节点指向新节点
pNew->pNext = NULL; // 尾节点指针域为NULL
pend = pNew;
}

return phead;
}

void traverseLinkList(PNODE pHead)
{
PNODE p = pHead->pNext;
while(NULL != p)
{
printf("%d ", p->data);
p = p->pNext;
}
printf("\n");
}