单链表的代码c++/c


单链表的代码


文章目录


一、代码
二、运行结果


前言

这是及上一篇文章后写的代码。用的是c++
也可以用C语言只需微改一下即可。



一、代码

#include "iostream"
using namespace std;
typedef struct lnode {
	int data;
	struct lnode* next;
}lnode, *linklist;
//链表初始化
linklist  initlist_l(linklist &l)
{
	l = new lnode;
	l->next = NULL;
	return l;
}
//判断链表是否为空
bool listEmpty(linklist l)
{
	if (l->next)
		return 0;
	else
		return 1;
}
//销毁单链表
int Destroylist_l(linklist l)
{
	linklist p;
	while (l)
	{
		p = l;
		l = l->next;
		delete p;
	}
	return 1;
}
//清空链表
int clearlist(linklist &l)
{
	linklist p, q;//u或linklist p,q;
	p = l->next;
	while (p) {
		q = p->next;
		delete p;
		p = q;
	}
	l->next = NULL;
	return 1;
}
//单链表的长度
int listlength_l(linklist l)
{
	int i = 0;
	linklist p;
	p = l->next;
	while (p) {
		i++;
		p = p->next;
	}
	return i ;
}
//取值--取链表中i位置的元素
void  getelem_l(linklist  l)
{
	cout << "请输入链表中的位置i" << endl;
	int i;
	cin >> i ;
	linklist p;
	p = l->next;
	int j = 1;
	while (p && j < i) {
		p = p->next;
		++j;
	}
	if (!p || j > i)
		cout << "查无此值" << endl;
	if (p)
		cout << "链表中第" << j << "位置上的值为" << p->data << endl;
}
//按值查找
void  locateelem_l(linklist l)
{
	cout << "请输入你想要查找的值" << endl;
	linklist p;
	p = l->next;
	int j = 1,e;
	cin >> e;
	while (p && p->data != e)
	{
		p = p->next; j++;
	}
	if (p)
		cout << "该值在第" << j << "的位置上" << endl;
	else
		cout << "查无此值" << endl;
}
//插入
void listlnsert_l(linklist l)
{
	int i,e;
	cin >> i>>e;
	linklist p;
	linklist s;
	s = new lnode;
	int j=1;
	p = l->next;

	while (p && j < i - 1)
	{
		p = p->next; ++j;//寻找第i-1个结点,p指向i-1结点
	}
		if (!p || j > i - 1)
			cout << "插入失败" << endl;
		s->data = e;//生成新结点s,将结点s的数据域为e;
		s->next = p->next;
		p->next = s;
}
//删除
void Listdelete_L(linklist l)
{
	int i,e;
	cin >> i;
	linklist p;
	linklist q;
	int j=0;
	p = l; 
	while (p && j < i - 1)
	{
		p = p->next; j++;
	}//寻找第i个结点,并令p指向其前驱
	if (!(p->next) || j > i - 1)
	{
		cout << "删除失败" << endl;
	}
	q = p->next;//临时保存被删除的结点以被释放
	p->next = q->next;//改变删除结点前驱结点指针域
	e = q->data;//保存删除结点的数据域
	delete q;//释放空间c++
}
//遍历链表将链表中的每一个元素输出;
void printlist(linklist l)
{
	linklist p = l->next;
	while (p)
	{
		cout << p->data << "   ";
		p = p->next;
	}
	cout << endl;
	if (!p)
	{
		cout << "链表已空" << endl;
	}
}
//创建单链表
linklist Creatlist(linklist l) {//头插法
	l = new lnode;
	l->next = NULL;//建立一个带头结点的单链表
	int n;
	cin >> n;
	linklist p;
	for (int i=n; i > 0; i--)
	{
		p = new lnode;//生成一个新节点c++
		//p = (Lnode*)malloc(sizeof(Lnode));生成一个新节点c
		cin >> p->data;
		p->next = l->next;//插入到表头
		l->next = p;
	}
	return l;
}

void menu()//还可以根据自己需要在添加其他功能
{
	cout<<"********1、插入   2、删除*********"<<endl;
	cout<<"********3、查找   4、取值*********"<<endl;
	cout<<"********5、输出   6、退出*********"<<endl;
}							   
int main()
{
	cout << "********创建单链表*******" << endl;
	linklist l;
	int choice=0;
	l= initlist_l(l);
	l=Creatlist(l);
	while (1)
	{
		menu();
		cout << "输入菜单号" << endl;
		cin >> choice;
		if (choice == 6)
			break;
		switch (choice)
		{
		case 1:listlnsert_l(l); break;
		case 2:Listdelete_L(l); break;
		case 3:locateelem_l(l); break;
		case 4:getelem_l(l); break;
		case 5:printlist(l); break;
		default:cout << "输入错误" << endl;
		}
	}
}

二、运行结果

********创建单链表*******
5
1 3 4 5 6
********1、插入   2、删除*********
********3、查找   4、取值*********
********5、输出   6、退出*********
输入菜单号
5
6   5   4   3   1
链表已空
********1、插入   2、删除*********
********3、查找   4、取值*********
********5、输出   6、退出*********
输入菜单号
1
3 9
********1、插入   2、删除*********
********3、查找   4、取值*********
********5、输出   6、退出*********
输入菜单号
5
6   5   9   4   3   1
链表已空
********1、插入   2、删除*********
********3、查找   4、取值*********
********5、输出   6、退出*********
输入菜单号
2
3
********1、插入   2、删除*********
********3、查找   4、取值*********
********5、输出   6、退出*********
输入菜单号
5
6   5   4   3   1
链表已空
********1、插入   2、删除*********
********3、查找   4、取值*********
********5、输出   6、退出*********
输入菜单号
3
请输入你想要查找的值
1
该值在第5的位置上
********1、插入   2、删除*********
********3、查找   4、取值*********
********5、输出   6、退出*********
输入菜单号
4
请输入链表中的位置i
4
链表中第4位置上的值为3
********1、插入   2、删除*********
********3、查找   4、取值*********
********5、输出   6、退出*********
输入菜单号
6

D:\c++\2\x64\Debug\2.exe (进程 29432)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

希望对大家有些帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值