栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构C++实现(单链表) 青岛大学王卓老师

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构C++实现(单链表) 青岛大学王卓老师

b站  《数据结构与算法基础(青岛大学-王卓)》

所用教材《数据结构C语言版第二版》 中国工信出版集团 人民邮电出版社出版 严蔚敏 编著

代码中名称有些按自己想法写的,只能给一些基本操作供大家参考

#include
using namespace std;
class Elem {
public:
	int name;
};
class Lnode {
public:
	Elem data;
	Lnode* next;
};
	void initlist(Lnode *&L);							//创建链表
	void DestroyList(Lnode *&L);					//删除链表
	void ClearList(Lnode* &L);					//清空链表
	int ListLength(Lnode* L);					//返回链表的表长
	int GetElem(Lnode* L, int i, Elem& e);			//查找第i个元素并返回其值
	int LocateElem(Lnode* L, Elem e);			//查找与e相同的值并返回是第几个元素
	int ListInsert(Lnode* &L, int i, Elem e);		//插入1个结点
	int ListDelete(Lnode* &L, int i);				//删除一个结点
	void CreateList_First(Lnode* &L, int n);			//创建一个带有头结点的n个结点的链表(头插法建立链表)
	void CreateList_Last(Lnode* &L, int n);			//尾插法建立链表
	void MergeList(Lnode* LA, Lnode* LB, Lnode* &LC);   //合并链表
    void initlist(Lnode* &L)						//创建链表
{
	L = new Lnode;
	 L->next= nullptr;	
}
void DestroyList(Lnode* &L)				//删除链表
{
	Lnode* p;
	while (L)
	{
		p = L;
		L = L->next;
		delete p;
	}
}
void ClearList(Lnode* &L)						//清空链表
{
	Lnode* p, * q;
	p = L->next;
	while (p)
	{
		q = p->next;
		delete p;
		p = q;
	}
	L->next = nullptr;
}
int ListLength(Lnode* L)				//返回链表的表长
{
	Lnode* p = L->next;
	int Length = 0;
	while (p)
	{
		Length++;
		p = p->next;		
	}
	return Length;
}
int GetElem(Lnode* L, int i, Elem& e)				//查找第i个元素并返回其值
{
	int j = 1;
	Lnode* p=L->next;
	while(p&&jnext;
		j++;
	}
	if (!p || i < j)
	{
		cerr << ("您查找的数不存在");
		return 1;
	}
	e = p->data;
}
int LocateElem(Lnode* L, Elem e)					//查找与e相同的值并返回是第几个元素
{
	Lnode* p = L->next;
	int i = 1;
	while (p && p->data.name != e.name)
	{
		p = p->next;
		i++;
	}
	return i;
	if (!p)
		return 1;
}
int ListInsert(Lnode* &L, int i, Elem e)							//插入1个结点
{
	Lnode* p = L;
	int j = 0;
	while (p && j < i - 1)
	{
		p = p->next;
		j++;
	}
	if (!p||j>i-1)return 1;				//i大于表长+1或i<1,就error
	Lnode *s = new Lnode;
	s->data = e;
	s->next = p->next;
	p->next = s;
}
int ListDelete(Lnode* &L, int i)					//删除一个结点
{
	Lnode*q,* p=L;
	int j = 0;
	while (p && j < i - 1)
	{
		p = p->next;
		j++;
	}
	if (!p || j > i - 1)return 1;
	q = p->next;
	p->next = p->next->next;
	delete q;
}
void CreateList_First(Lnode* &L, int n)					//头插法建立链表
{
	L = new Lnode;
	L->next = nullptr;							//建立一个带头结点的单链表
	for (int i = n; i > 0; i--)
	{
		Lnode* p = new Lnode;
		cin >> p->data.name;
		p->next = L->next;				//插入到表头
		L->next = p;
	}
}
void CreateList_Last(Lnode*& L, int n)			//尾插法建立链表
{
	L = new Lnode;
	L->next = nullptr;
	Lnode* r = L;									//尾指针r指向链表的尾结点
	for (int i = 0; i < n; i++)
	{
		Lnode* p = new Lnode;
		cin >> p->data.name;
		r->next = p;
		p->next = nullptr;
		r = p;
	}
}
void MergeList(Lnode* LA, Lnode* LB, Lnode* &LC)				//合并链表
{
	Lnode* pa = LA->next;
	Lnode* pb = LB->next;
	LC = LA;
	Lnode* pc = LC;
	while (pa && pb)
	{
			if(pa->data.name <= pb->data.name)
		{
			pc->next = pa;
			pc = pa;
			pa = pa->next;
		}
			else
		{
			pc->next = pb;
			pc = pb;
			pb = pb->next;
		}
	}
	pc->next = pa ? pa : pb;								//插入剩余段
	delete LB;														//删除剩下的头结点

}
int main()
{
	
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1034386.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号