当前位置: 首页 > article >正文

数据结构-单链表(C语言版)

 创建一个链表,实现:1.以头结点开始插入数据(头插法)2.以尾节点开始插入数据(尾插法)3.输出链表所存入数据 4.指定位置插入数据 5.指定位置删除数据

#include<stdio.h>
#include<stdlib.h>
typedef int DataType; 
typedef struct node{
	DataType data;
	struct node* portion;
}Node;
Node* init() //初始化单链表 
{
	Node* A = (Node*)malloc(sizeof(Node));
	A->data = 0;
	A->portion = NULL;
	return A;
}
void headwrite(Node* A,DataType data) //头插法 
{
	Node* P = (Node*)malloc(sizeof(Node));
	P->data = data;
	P->portion = A->portion;
	A->portion = P;
}
Node* findtrail(Node* A) //寻找尾节点,只有找到尾节点,才能尾插法 
{
	Node* P = (Node*)malloc(sizeof(Node));
	P = A;
	while(P->portion != NULL)
	{
		P= P->portion;
	}
	return  P;
}
void trailwrite(Node* A,DataType data)  //尾插法,只有找到尾节点,才能尾插法 
{
	Node* P = (Node*)malloc(sizeof(Node));
	Node* Q = (Node*)malloc(sizeof(Node));
	P = findtrail(A);
	Q->data = data;
	P->portion = Q;
	Q->portion = NULL;	
}
int deletedata(Node* A,int portion) //删除节点 
{
	int i = 0;
	Node* P = (Node*)malloc(sizeof(Node));
	Node* Q = (Node*)malloc(sizeof(Node));
	P = A;
	while(i < portion - 1)
	{
		P = P->portion;
		i ++;
		if(P == NULL)
		{
			printf("删除节点错误,请重新选择位置");
			return 0;
		}
		  
	}
	Q = P->portion;
	P->portion = Q->portion;
	free(Q);
 } 
int insertdata(Node* A,int portion,DataType data) //指定位置插入数据 
{
	int i = 0;
	Node* P = (Node*)malloc(sizeof(Node));
	Node* Q = (Node*)malloc(sizeof(Node));
	P = A;
	while(i < portion - 1)
	{
		P = P->portion;
		i ++;
		if(P == NULL)
			return 0;
	}
	if(P->portion == NULL)
	{
		printf("删除的位置错误\n");
		return 0;
	}
	 
	Q->data = data;
	Q->portion = P->portion;
	P->portion = Q;
}
void read(Node* A) //输出链表数据 
{
	Node* P = (Node*)malloc(sizeof(Node));
	P = A->portion;
	while(P != NULL)
	{
		printf("%d ",P->data);
		P = P->portion;
	}
	printf("\n");
}
int main()
{
	int i = 0;
	Node* H = init();
	for(i = 0;i < 10;i ++)
	{
		headwrite(H,i + 10); //头插法插入数据 
	}
	read(H);//输出数据 
	trailwrite(H,80); //尾插法插入数据 
	trailwrite(H,90);//尾插法插入数据 
	read(H);//输出数据 
	deletedata(H,3);//指定位置删除数据 
	read(H);//输出数据 
	insertdata(H,4,100);//指定位置插入数据 
	read(H);//输出数据 
	free(H); //释放数据 
	return 0;
 } 

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==


http://www.kler.cn/a/469592.html

相关文章:

  • 缓存-Redis-缓存更新策略-主动更新策略-Cache Aside Pattern(全面 易理解)
  • 2025最新版Visual Studio Code安装使用指南
  • 字玩FontPlayer开发笔记4 性能优化 首屏加载时间优化
  • 【论文+源码】基于Spring和Spring MVC的汉服文化宣传网站
  • 【HarmonyOS-ArkTS语言】面向对象【合集】
  • R语言基础| 中级绘图
  • AutoSar架构学习笔记
  • 跨年战揭开本地生活新赛季:美团、抖音和快手争夺冰雪经济
  • 每天40分玩转Django:Django实战 - 在线打印服务系统
  • 基于Python读取ZIP和TAR格式压缩包教程
  • 《Vue3实战教程》35:Vue3测试
  • 概述(讲讲python基本语法和第三方库)
  • SkinnedMeshRenderer相关知识
  • Linux下ssh远程命令详解及示例
  • 反规范化带来的数据不一致问题的解决方案
  • SQL拦截器 翻译整个sql语句
  • STM32学习(四)
  • Multisim更新:振幅调制器+解调器(含仿真程序+文档+原理图+PCB)
  • OceanBase到MySQL实时同步方案
  • 【JVM】总结篇-类的加载篇之 类的加载器 和ClassLoader分析
  • 如何排查 Apache Doris 中 “Failed to commit txn“ 导入失败问题?
  • QML学习(七) 学习QML时,用好Qt设计器,快速了解各个组件的属性
  • 数字化供应链创新解决方案在零售行业的应用研究——以开源AI智能名片S2B2C商城小程序为例
  • 数据结构大作业——家谱管理系统(超详细!完整代码!)
  • 【数据可视化-11】全国大学数据可视化分析
  • 填充矩形C++