链表采用动态存储分配的方法为每一个结点分配内存空间,它用一组任意的存储单元来依次序存放数据,这组存储单元称为结点。
每个结点都分为两个域:一个是数据域,存放各种实际数据;另一个是指针域,存放下一个结点的首地址。
写一个简单的例子。
#include <stdio.h>
#include "stdlib.h"
typedef struct Lnode {
int data;
Lnode *next;
} Lnode, *LinkList;
//编写一个函数:头插法插入值
bool List_HeadInsert(LinkList &L) {
L = (LinkList)malloc(sizeof(Lnode)); //L申请动态内存空间
L->next = NULL; //初始化传入的结构体L
Lnode *s; //定义一个形参辅助插入数据
int x = NULL, i = 1; //x为每次输入的数据中转量,i记录输入的次数
printf("输入数字为9999时结束\n");
do {
printf("请输入第%d个整型数据:", i++);
scanf("%d", &x);
if (x != 9999 && x != NULL) {
s = (LinkList)malloc(sizeof(Lnode));
s->next = NULL;
s->next = L->next;
s->data = x;
L->next = s;
}
} while (x != 9999 && x != NULL);
i = i - 2;
printf("输入了%d个数据\n", i);
if (i)
return true;
else
return false;
}
void List_Check(LinkList L) {
LinkList p = L -> next;
int i = 0;
printf("依次输出链表数据\n");
while (p != NULL) {
printf("第%d个数字是%d\n", ++i, p->data);
p = p->next;
}
}
int main() {
LinkList SingleLink;
if (List_HeadInsert(SingleLink)) {
printf("输入完毕!\n");
} else
printf("无输入!\n");
List_Check(SingleLink);
}
输入和输出的结果。
可以见得,使用头插法依序录入数据后,输出是倒序的。