欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言单链表实现

程序员文章站 2022-05-29 09:56:44
...

一:NOTE

今天分享一下单链表(有空头)的一些操作!主要呢就是增、删、打印!

二:预备知识

单链表可以比喻成一趟火车,有空头的单链表就像是一个火车头拉着一节有一节的车厢。一个车厢中有数据域和指针域,指针域用来连接,每节车厢肯定要有东西连着,不然就没有方向了。如图
C语言单链表实现
所以连接的时候只要将指针域指向下一个节点就是连接上了,然后删除呢
给个图应该很清楚了
C语言单链表实现

三:明确步骤

写程序前,首先捋清楚程序有哪些步骤,然后在下手一步一步实现功能
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;
}

五:结果演示

C语言单链表实现