链表2

 先看代码:

  文件名: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基础知识时,做的简单笔记,希望大家不要见笑,呵呵

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值