单链表基本运算源码......

_谦言万语 2022-09-13 16:34:11
#include <stdio.h>
#include <malloc.h>

typedef struct LNode
{
	char date;//元素域 
	struct LNode *next;//指向下一个结点的指针(指针域) 
}LinkLode;

//头插法 
void CreateListF(LinkLode *&L, char a[], int n)
{
	LinkLode *s;
	L=(LinkLode *)malloc(sizeof(LinkLode));
	L->next=NULL;
	for(int i=0; i<n; i++)
	{
		s=(LinkLode *)malloc(sizeof(LinkLode));
		s->date=a[i];
		s->next=L->next;
		L->next=s;
	}
}

//尾插法 
void CreateListR(LinkLode *&L, char a[], int n)
{
	LinkLode *s,*r;
	L=(LinkLode *)malloc(sizeof(LinkLode));
	L->next=NULL;
	for(int i=0; i<n; i++)
	{
		s=(LinkLode *)malloc(sizeof(LinkLode));
		s->date=a[i];
		r->next=s;
		r=s;
	}
	r->next=NULL;//最后需要指向空节点 
}

//初始化单链表 
void InitList(LinkLode *&L)
{
	L=(LinkLode *)malloc(sizeof(LinkLode));
	L->next=NULL;
}

//摧毁单链表需要一个一个结点free 
void DestoryList(LinkLode *&L)
{
	LinkLode *pre=L, *p=pre->next;
	while(p!=NULL)
	{
		free(pre);
		pre=p;
		p=p->next;
	}
	free(pre);
}

bool ListEmpty(LinkLode *L)
{
	return (L->next==NULL);
}

int ListLength(LinkLode *L)
{
	int i=0;
	LinkLode *p=L;
	while(p->next!=NULL)
	{
		i++;
		p=p->next;
	}
	return i;
}

//输出单链表 
void DispList(LinkLode *L)
{
	LinkLode *p=L->next;
	while(p!=NULL)
	{
		printf("%c ",p->date);
		p=p->next; 
	}
	printf("\n"); 
}

//找到对应位置的元素 
bool GetElem(LinkLode *L,int i, char &e)
{
	int j=0;
	LinkLode *p=L;
	if(i<=0) return false;
	while(j<i && p!=NULL)
	{
		j++;
		p=p->next; 
	}
	if(p==NULL) return false;
	else
	{
		e=p->date;
		return true;
	}
}

//定位对应元素的位置 
int LocateElem(LinkLode *L, char e)
{
	int i=1;
	LinkLode *p=L->next;
	while(p!=NULL && p->date!=e)
	{
		i++;
		p=p->next;
	}
	if(p==NULL) return 0;
	else return i;
} 

//插入元素 
bool ListInsert(LinkLode *&L, int i, char e)
{
	int j=0;
	LinkLode *p=L,*s;
	if(i<=0) return false;
	while(p!=NULL && j<i-1)
	{
		j++;
		p=p->next;
	}
	if(p==NULL) return false;
	else 
	{
		s=(LinkLode*)malloc(sizeof(LinkLode));
		s->date=e;
		s->next=p->next;
		p->next=s;
		return true;
	}
}

//删除元素 
bool ListDelete(LinkLode *&L,int i,char e)
{
	int j=0;
	LinkLode *p=L,*q;
	if(i<=0) return false;
	while(p!=NULL && j<i-1)
	{
		j++;
		p=p->next;
	}
	if(p==NULL) return false;
	else 
	{
		q=(LinkLode *)malloc(sizeof(LinkLode));
		q=p->next;
		if(q==NULL) return false;
		e=q->date;
		p->next=q->next;
		free(q);
		return true;
	}
}

int main()
{
	LinkLode *h;
	char e;
	printf("单链表的基本运算如下:\n");
	printf("  (1)初始化单链表h\n");
	InitList(h);
	printf("  (2)依次采用尾插法插入a,b,c,d,e元素\n");
	ListInsert(h,1,'a'); 
	ListInsert(h,2,'b');
	ListInsert(h,3,'c');
	ListInsert(h,4,'d');
	ListInsert(h,5,'e');
	printf("  (3)输出单链表h:"); DispList(h);
	printf("  (4)单链表h的长度:%d\n",ListLength(h));
	printf("  (5)单链表h为%s\n",(ListEmpty(h) ? "空" : "非空"));
	GetElem(h,3,e);
	printf("  (6)单链表h的第3个元素:%c\n",e);
	printf("  (7)元素a的位置:%d\n",LocateElem(h,'a'));
	printf("  (8)在第4个元素位置上插入f元素\n");
	ListInsert(h,4,'f'); 
	printf("  (9)输出单链表h:"); DispList(h);
	printf("  (10)删除h的第3个元素\n");
	ListDelete(h,3,e);
	printf("  (11)输出单链表h:"); DispList(h);
	printf("  (12)释放单链表h\n");
	DestoryList(h);
	return 0; 
}

 

...全文
44 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 2023-01-13
  • 打赏
  • 举报
回复
您可以前往 CSDN问答-编程语言 发布问题, 以便更快地解决您的疑问
RSA加密算法 二分搜寻法 剪枝算法 大数运算 模拟退火算法 并查集 魔方阵等120个常用算法C源码: B树算法.zip KMP算法.zip LSM树算法.zip RSA加密算法.zip 三色棋.zip 三角矩阵.zip 乱数排列.zip 二分搜寻法.zip 二分查找算法.zip 二叉堆.zip 二叉查找树算法.zip 二叉树排序.zip 二叉树算法.zip 二项堆.zip 产生可能的集合.zip 伸展树算法.zip 八枚银币.zip 八皇后.zip 冒泡排序算法.zip 决策树.zip 分块查找.zip 分治算法.zip 剪枝算法.zip 动态栈.zip 动态规划算法.zip 单链表算法.zip 双向链表算法.zip 后序式.zip 哈夫曼树算法.zip 哈希查找.zip 回溯算法.zip 图.zip 基数排序算法.zip 堆排序算法.zip 多维矩阵转一维矩阵.zip 大数运算.zip 完全二叉树算法.zip 完美数.zip 宽度优先搜索.zip 对称矩阵.zip 对角矩阵.zip 左倾堆.zip 布隆过滤器.zip 希尔排序算法.zip 平衡二叉树算法.zip 并查集.zip 广义表.zip 广度优先搜索.zip 开源项目.zip 归并排序算法.zip 得分排行.zip 循序搜寻法.zip 循环搜寻法.zip 循环链表算法.zip 循环队列.zip 快速排序2.zip 快速排序3.zip 快速排序算法.zip 拓扑排序算法.zip 排列组合.zip 推荐算法.zip 插值查找.zip 插入排序算法.zip 插补搜寻法.zip 数字拆解.zip 数组列优先顺序.zip 数组行优先顺序.zip 斐波那契堆.zip 斐波那契查找.zip 斜堆.zip 最大m子段问题.zip 最大子段和问题的简单算法.zip 最大访客数.zip 最小生成树.zip 最短路径算法.zip

51,715

社区成员

发帖
与我相关
我的任务
社区描述
和众多高校算法内卷分子,一起学习和交流算法那。浓郁的算法交流氛围,拒绝躺平,有效内卷。加入我们,私信我拉你入核心内卷群。
算法数据结构leetcode 个人社区
社区管理员
  • 执 梗
  • Dream-Y.ocean
  • ღCauchyོꦿ࿐
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

 刷题!

试试用AI创作助手写篇文章吧