admin管理员组文章数量:1794759
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
版权声明:本文标题:C语言单链表的入门学习 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686892820a115201.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论