C语言单链表实现
程序员文章站
2022-05-29 09:56:44
...
一:NOTE
今天分享一下单链表(有空头)的一些操作!主要呢就是增、删、打印!
二:预备知识
单链表可以比喻成一趟火车,有空头的单链表就像是一个火车头拉着一节有一节的车厢。一个车厢中有数据域和指针域,指针域用来连接,每节车厢肯定要有东西连着,不然就没有方向了。如图
所以连接的时候只要将指针域指向下一个节点就是连接上了,然后删除呢
给个图应该很清楚了
三:明确步骤
写程序前,首先捋清楚程序有哪些步骤,然后在下手一步一步实现功能
1、定义节点结构体
2、创建链表空头
3、创建节点
4、头插法
5、尾插法
6、删除结点
7、打印
四:程序实现
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct Node
{
int data;
struct Node* next;
};
//1、创建链表 记住要初始化
struct Node* CreatList()
{
struct Node* head = (struct Node*)malloc(sizeof(struct Node));
head->next = NULL;
return head;
}
//2、创建节点
struct Node* CreatNode(int data)
{
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
//3、头插法
void InsertHead(struct Node* list, int data)
{
struct Node* newnode = CreatNode(data);
struct Node* head = list;
newnode->next = head->next;
head->next = newnode;
}
//4、尾插法
void InsertTail(struct Node* list, int data)
{
struct Node* newnode = CreatNode(data);
struct Node* ptemp = list;
while (ptemp->next != NULL)
{
ptemp = ptemp->next;
}
ptemp->next = newnode;
ptemp = newnode;
}
//5、指定数据删除
void deletenode(struct Node* list, int data)
{
struct Node* ptemp = list->next;
struct Node* ptempFront = list;
while (ptemp->data != data)
{
ptempFront = ptemp;
ptemp = ptemp->next;
if (ptemp == NULL)
{
printf("没有找到该节点\n");
return;
}
}
ptempFront->next = ptemp->next;
free(ptemp);
}
//6、打印
void printnode(struct Node* list)
{
struct Node* pmove = list->next;
while (pmove != NULL)
{
printf("%d\t", pmove->data);
pmove = pmove->next;
}
printf("\n");
}
int main()
{
struct Node* list = CreatList();
InsertHead(list, 1);
InsertHead(list, 2);
InsertHead(list, 3);
InsertHead(list, 4);
InsertTail(list, 5);
printnode(list);
deletenode(list, 5);
printnode(list);
system("pause");
return 0;
}
五:结果演示
上一篇: 项目部署--Django播客系统(十二)
下一篇: C#之封装 ,继承,多态