单链表简单操作(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基础知识时,做的简单笔记,希望大家不要见笑,呵呵

转载于:https://www.cnblogs.com/mandroid/archive/2011/10/27/2225929.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
单链表是一种常见的数据结构,用于存储一系列的元素。在C语言中,可以通过定义一个结构体来表示单链表的节点,每个节点包含一个数据域和一个指针域,指向下一个节点。 首先,我们需要定义单链表的节点结构体: ```c struct ListNode { int data; // 数据域 struct ListNode* next; // 指针域,指向下一个节点 }; ``` 接下来,我们可以实现一些基本操作,比如创建单链表、插入节点、删除节点和遍历单链表等。 创建单链表的函数如下所示,可以根据给定的数组创建一个单链表: ```c struct ListNode* createLinkedList(int arr[], int size) { struct ListNode* head = NULL; // 头节点指针 struct ListNode* tail = NULL; // 尾节点指针 for (int i = 0; i < size; i++) { struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode)); newNode->data = arr[i]; newNode->next = NULL; if (head == NULL) { head = newNode; tail = newNode; } else { tail->next = newNode; tail = newNode; } } return head; } ``` 插入节点的函数如下所示,可以在指定位置插入一个新节点: ```c void insertNode(struct ListNode** head, int data, int position) { struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode)); newNode->data = data; newNode->next = NULL; // 插入到链表头部 if (position == 0) { newNode->next = *head; *head = newNode; return; } struct ListNode* curr = *head; struct ListNode* prev = NULL; int count = 0; // 找到插入位置的前一个节点 while (curr != NULL && count < position) { prev = curr; curr = curr->next; count++; } // 插入到链表中间或尾部 if (curr != NULL) { newNode->next = curr; } prev->next = newNode; } ``` 删除节点的函数如下所示,可以删除指定位置的节点: ```c void deleteNode(struct ListNode** head, int position) { if (*head == NULL) { return; } struct ListNode* curr = *head; struct ListNode* prev = NULL; int count = 0; // 找到要删除的节点 while (curr != NULL && count < position) { prev = curr; curr = curr->next; count++; } // 删除头节点 if (prev == NULL) { *head = curr->next; } else { prev->next = curr->next; } free(curr); } ``` 遍历单链表的函数如下所示,可以将单链表中的元素依次输出: ```c void traverseLinkedList(struct ListNode* head) { struct ListNode* curr = head; while (curr != NULL) { printf("%d ", curr->data); curr = curr->next; } } ``` 以上是单链表的基本操作实现,你可以根据需要调用这些函数进行单链表操作

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值