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

数据结构单链表的基本操作_数据结构单链表的实现?

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

数据结构单链表的基本操作_数据结构单链表的实现?

前言:本文是在lady_killer9的博客_CSDN博客-网络安全,python,常见算法与数据结构实现领域博主做出相应的修改,完善了部分代码,有不足之处欢迎指正

#include
using namespace std;
#define Status int
#define ElemType int
typedef struct LNode
{
	ElemType data;//数据域
	struct LNode* next;//指针域
}LNode, * linkList;

Status InitList(linkList& L)
{
	L = new LNode;
	L->next = NULL;
	return 1;
}
//头插法创建
void CreateList_H(linkList& L) {
	int i, n,x;
	LNode* temp;
	cout << "请输入链表的结点个数:";
		cin >> n;
	L = new LNode;
	L->next = NULL;
	for (i = n; i >= 1; i--) {
		cout << endl << "--------请输入第" << i << "个节点的数据:" ;
		cin >> x;
		temp = new LNode;
		temp->data = x;
		temp->next = L->next;
		L->next = temp;
	}
}
//尾插法创建
void CreateList_R(linkList& L) {
	int i, n,x;
	cout << "请输入链表的结点个数:";
	cin >> n;
	L = new LNode;
	L->next = NULL;
	LNode* temp, * r;
	r = L;
	for (i = 1; i <= n; i++) {
		cout << endl << "--------请输入第"<> x;
		temp->data = x;
		temp->next = r->next;
		r->next = temp;
		r = temp;
	}
}
int ListLength(linkList L)
{
	linkList p = L; int sum = 0;
	while (p)
	{
		sum++;
		p = p->next;
	}
	return sum - 1;//不含头结点
}
//插入
bool ListInsert(linkList& L, int i, ElemType e)
{
	LNode* s; linkList p = L; int j = 0;
	while (p && (j < i - 1))//j指到i-1位置或者p已经到最后时跳出
	{
		p = p->next;
		++j;
	}
	if (!p || j > i - 1)//i<1或者i>ListLength(L)+1时,插入位置无效 不调用ListLength,提高效率
	{
		cout << "插入的位置无效!!!" << endl;
		return false;
	}
	s = new LNode;
	s->data = e;
	s->next = p->next;
	p->next = s;
	return true;
}
bool ListDelete(linkList& L, int i)
{
	LNode* p, * q;
	p = L;
	int j = 0;
	while ((p->next)&& (j < i - 1))//j指到i-1位置
	{
		p = p->next;
		++j;
	}
	if (!(p->next) || (j > i - 1))//i<1或者i>ListLength(L)时,删除位置无效
	{
		cout << "删除的位置无效!!!" << endl;
		return false;
	}
	q = p->next;
	p->next = q->next;
	delete q ;//释放空间
	return true;
}
LNode* LocateElem(linkList L, ElemType e)
{
	LNode* p = L;
	while (p && (p->data != e))
	{
		p = p->next;
	}
	return p;
}
bool  GetLElem(linkList& L,int i,ElemType &e) {
	LNode* p;
	p = L->next;
	int j = 1;
	while (p && j < i) {
		p = p->next;
		++j;
	}
	if (!p || j > i) {
		printf("n位置不合法!!n");//i值不合法
		return false;
	}
	e = p->data;
	return true;
}
//遍历输出函数
void PrintList(linkList L)
{
	linkList p = L->next;//跳过头结点
	if (ListLength(L))
	{
		cout << "当前单链表所有元素:";
		while (p)
		{
			cout <data<<" ";
			p = p->next;
		}
		printf("n");
	}
	else
	{
		cout << "当前单链表已空!" << endl;
	}
}
void Insert(linkList& L)
{
	int place; ElemType e; bool flag;
	cout << "请输入要插入的位置(从1开始)及元素:" << endl;
	cin >> place >> e;
	flag = ListInsert(L, place, e);
	if (flag)
	{
		cout << "插入成功!!!" << endl;
		PrintList(L);
	}
}
void Delete(linkList L)
{
	int place; bool flag;
	cout << "请输入要删除的位置:" << endl;
	cin >> place;
	flag = ListDelete(L, place);
	if (flag)
	{
		cout << "删除成功!!!" << endl;
		PrintList(L);
	}
}
void Search(linkList L)
{
	ElemType e; LNode* q;
	cout << "请输入要查找的值:" << endl;
	cin >> e;
	q = LocateElem(L, e);
	if (q)
	{
		cout << "找到该元素!" << endl;
	}
	else
		cout << "未能找到该元素!" << endl;
}
void GetElem(linkList L) {
	int i;
	ElemType e;
	bool flag;
	cout << "请输入要查找的结点位置:" << endl;
	cin >> i;
	flag = GetLElem(L, i, e);
	if (flag) {
		cout << "该元素为:" << e << endl;
	}
	else {
		cout << "位置不合理!" << endl;
	}
}
void menu()
{
	printf("********1.插入    2.删除*********n");
	printf("********3.查找    4.输出*********n");
	printf("***5.创建(头)   6.***创建(尾)n");
	printf("********7.取值    8.退出*********n");
}
int main()
{
	linkList L; int choice;
	InitList(L);
	while (1)
	{
		menu();
		cout << "请输入菜单序号:" << endl;
		cin >> choice;
		if (choice == 8) break;
		switch (choice)
		{
		case 1:Insert(L); break;
		case 2:Delete(L); break;
		case 3:Search(L); break;
		case 4:PrintList(L); break;
		case 5:CreateList_H(L); break;
		case 6:CreateList_R(L); break;
		case 7:GetElem(L); break;
		default:cout << "输入错误!!!" << endl; 
		}
	}
	return 0;
}

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

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

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