### 数据结构C语言编程:链表的创建、插入与删除 #### 一、链表的基本概念 链表是一种常见的线性表存储结构,它通过一组任意的存储单元来存储线性表中的数据元素。每个存储单元称为一个节点(node),每个节点包含两部分:一部分存放表中的数据元素,称为数据域;另一部分存放指向下一个节点地址的指针,称为指针域。 #### 二、链表的创建 链表的创建通常是指动态地为链表分配内存,并连接各个节点的过程。下面是一个简单的单向链表创建示例: ```c #include <stdio.h> #include <stdlib.h> typedef struct Node { int num; struct Node *next; } Node; Node *createList() { Node *head = NULL; Node *p, *newNode; do { printf("Enter number (0 to stop): "); scanf("%d", &newNode->num); if (newNode->num != 0) { newNode = (Node *)malloc(sizeof(Node)); newNode->num = num; newNode->next = NULL; if (head == NULL) { head = newNode; p = head; } else { p->next = newNode; p = p->next; } } } while (newNode->num != 0); return head; } ``` #### 三、链表节点的插入 链表节点的插入分为几种情况:头部插入、尾部插入以及指定位置插入。这里主要介绍在链表中指定位置插入节点的方法。 ```c void insertNode(Node **head, int num, int pos) { Node *newNode = (Node *)malloc(sizeof(Node)); newNode->num = num; newNode->next = NULL; if (*head == NULL) { // 如果链表为空,则直接将新节点作为头节点 *head = newNode; } else if (pos == 1) { // 在头部插入 newNode->next = *head; *head = newNode; } else { Node *p = *head; for (int i = 1; p != NULL && i < pos - 1; i++) { p = p->next; } if (p == NULL) { // 指定位置超出链表长度 printf("Position out of range.\n"); free(newNode); } else { // 插入到指定位置 newNode->next = p->next; p->next = newNode; } } } ``` #### 四、链表节点的删除 链表节点的删除操作通常需要先找到待删除节点的前一个节点,然后更新该节点的指针域。如果待删除节点是头节点,则需要重新设置头指针。 ```c void deleteNode(Node **head, int num) { Node *p = *head; Node *q = NULL; if (p == NULL) { printf("List is empty.\n"); return; } if (p->num == num) { // 删除头节点 *head = p->next; free(p); return; } while (p != NULL && p->num != num) { q = p; p = p->next; } if (p == NULL) { // 没有找到指定数值的节点 printf("Element not found.\n"); return; } q->next = p->next; free(p); } ``` #### 五、链表的遍历 遍历链表是指从头节点开始,沿着指针域访问每个节点,直到链表的末尾。遍历链表可以用于打印链表中的所有元素,也可以用于查找特定元素等操作。 ```c void printList(Node *head) { Node *p = head; while (p != NULL) { printf("%d ", p->num); p = p->next; } printf("\n"); } ``` #### 六、总结 本文介绍了如何使用C语言实现单向链表的基本操作,包括创建链表、插入节点、删除节点以及遍历链表。通过这些基本操作,可以构建出功能更为强大的数据结构,并应用于各种实际问题的解决中。链表作为一种灵活的数据结构,在处理需要频繁插入或删除元素的应用场景时具有很高的效率。
#include "malloc.h"
#define LEN sizeof(struct stu)
main(){
struct stu{
int num;
stu *next;
};
int e;
struct stu *head;
struct stu *p1,*p2,*p;
p1=p2=(struct stu *)malloc(LEN);
scanf("%d",&p1->num);
int n=0;
while(p1->num!=0){
n+=1;
if(n==1){
head=p1;
p=head;
}
else{
p2->next=p1;
}
p2=p1;
p1=(struct stu *)malloc(LEN);
scanf("%d",&p1->num);
}
p2->next=0;
- 粉丝: 0
- 资源: 4
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助