单链表简单操作(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 2011-10-27 01:00  宁 静 致 远  阅读(3149)  评论(0编辑  收藏  举报