随笔 - 16  文章 - 0  评论 - 72  阅读 - 53万

单链表简单操作(C语言描述)

 

  先看代码:

  文件名:main.c

  

复制代码
 1 #include <stdio.h>
2 #include <stdlib.h>
3 /*******************************************************************
4
5 熟悉链表(List)的结构:
6 1、头指针、头节点、首节点和尾节点的概念
7 2、创建一个链表的算法
8 3、遍历一个链表的算法
9
10 *******************************************************************/
11 struct Node
12 {
13 int value;
14 struct Node *pNext;
15 };
16
17
18 struct Node * initList(void );
19 void printListElements(struct Node *pheader);
20
21 int main(void)
22 {
23
24 struct Node *ph = initList();
25 printListElements(ph);
26 return 0;
27 }
28
29 /**************************************************
30
31 根据输入链表元素个数和数值,动态创建链表
32
33 **************************************************/
34 struct Node * initList(void )
35 {
36 struct Node *pHeader; //头指针,指向头结点
37 struct Node *pTail; //类似游标,每次移动指向最后一个元素
38 struct Node *pnode;
39 int i,num;
40 pHeader = (struct Node *)malloc(sizeof(struct Node)); //创建头节点
41 pTail = (struct Node *)malloc(sizeof(struct Node)); //创建首元素
42 pHeader->pNext = pTail;
43
44 printf("请输入链表元素的个数:");
45 scanf("%d",&num);
46 for(i=1;i<num+1;i++)
47 {
48 printf("请输入第%d个元素值:",i);
49
50 scanf("%d",&pTail->value);
51 pnode = (struct Node *)malloc(sizeof(struct Node));
52
53 pTail->pNext = pnode;
54 pTail = pTail->pNext;
55
56
57 }
58
59 pTail->pNext = NULL; //****** 注意单独为最后一个元素的指针域赋空,不然此链表没有尾结点了
60
61 return pHeader;
62
63
64 }
65 /************************************************************************
66
67 遍历所有元素值 ,并打印输出
68
69 ************************************************************************/
70 void printListElements(struct Node *pheader)
71 {
72 struct Node *node;
73 int i = 1;
74 node = pheader->pNext; //node 指向了首元素
75 while(NULL!=node->pNext)
76 {
77 printf("第%d个元素值是:%d\n",i,node->value);
78 i++;
79 node = node->pNext; //node类似游标,每次向后移动,指向下一个元素
80
81 }
82 }
复制代码

  小结:

  1、理解单向链表的结构,如下图所示:

  1)头结点:在建立链表过程中起到开头作用,但在它的数据域里尽量不要存放程序的数据,以免在进行删除第一个数据时无能为力,因为无法找到那个指向头节点的节点,不利于针对所有数据的循环滚动操作。它是不含有效数据的,只是指针域指向首结点。

  2)空链表就是头结点的指针域为空。

  3)创建链表时,一定要注意为最后一个结点的指针域赋NULL,不然在对该链表遍历时,没有结尾了。

  4)在对有头结点的链表操作时,要处理好这个首结点,以便准确地进行循环操作。

 

以上只是回顾C基础知识时,做的简单笔记,希望大家不要见笑,呵呵

posted on   宁 静 致 远  阅读(3150)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
< 2011年10月 >
25 26 27 28 29 30 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 1 2 3 4 5

点击右上角即可分享
微信分享提示