admin管理员组

文章数量:1794759

C语言单链表的入门学习

C语言单链表的入门学习

C语言单链表的创建与遍历

建立一个链表存放输入的整数。使链表中从链头至链尾的结点排列顺序正好和整数的输入顺序相同(称为先进先出链表或“队列”,即最先建立的结点为链头,最后建立的结点为链尾)。

1.创建结点的结构体类型

typedef struct _node { int num; struct _node * next; }node;

每一个结点包含存放的数据和指向下一结点的指针。 注:结构体本身不能含有同类型的结构,但是它可以含有指向同类型结构的指针。

2.建立一个链表 (1)声明一个头指针head,并使其具有初值NULL,再声明一个暂时保存当前新建结点存储地址的指针p,最后声明一个指向链尾的指针tail,并使其具有初值NULL。

node * head = NULL, *p, *tail = NULL;

(2)为新建的结点分配内存,并使p指向该结点。

p = (node *)malloc(sizeof(node));

(3)判断新建结点p是否为第一个结点(head是否指向NULL),是则使head指向p,否则使当前链尾结点的指针指向p(使当前链尾结点与新建结点链接,生成新的链尾)。

if (head == NULL) head = p; else tail->next = p;

(4)将数据存入新建的结点,并使新建的结点称为链表中最后一个结点,即链尾。

p->num = n; p->next = NULL;

(5)此时已经生成了新的链尾结点,所以使链尾结点tail指向新的链尾结点。

tail = p;

(6)重复步骤(2)到(5)直到结束。

3.遍历链表(逐个读取链表中所有结点的过程)。 (1)使遍历指针p指向链头。 (2)如果链表不为空则输出当前结点存放的数据,否则结束。 (3)每输出一个结点之后使p指向下一个结点。 (4)重复(2)到(3)直到结束。

p = head; while (p != NULL) { printf("%d ", p->num); p = p->next; }

4.完整代码运行。

#include<stdio.h> #include<stdlib.h> typedef struct _node { int num; struct _node * next; }node; int main(void) { node * head = NULL, *p, *tail = NULL; int n; while(scanf("%d", &n) == 1)//当输入不为整数时结束 { p = (node *)malloc(sizeof(node)); if(head == NULL) head = p; else tail->next = p; p->num = n; p->next = NULL; tail = p; } p = head; while (p != NULL) { printf("%d ", p->num); p = p->next; } printf("\\n"); return 0; }

试例 输入:2 4 1 8 9 q 输出:2 4 1 8 9

本文标签: 入门链表语言