STL中链表操作和正常的链表操作的比较

本文探讨了链表的基本操作,包括创建、插入、显示和删除数据,并对比了使用传统链表操作与STL(标准模板库)的差异。通过具体代码示例,展示了在C++中如何实现这些功能,以及STL提供的简化解决方案。

先写一个正常的链表操作,还有点小问题,谁看到了给我留言一下,帮我改一下,就是在删除的时候不能删除第一个元素,第二个就是删除的元素不能紧挨着,比如说有一组数据 1 2 3 5 2 25 2 2 2 4,我想删除2,那么就会报错,找了很长时间,真的找不出来了。

#include<iostream>
using namespace std;
typedef struct  node
{
	int data;
	struct  node*next;
}*NODE;
NODE creatlist()
{
	NODE pHead = (NODE)malloc(sizeof(struct  node));
	if (pHead == NULL)
	{
		cout << "创建链表失败" << endl;
	}

	return pHead;
}
NODE insertData(NODE pHead)
{
	int data;
	NODE p = pHead;
	cout << "请输入数据,以0结束:" << endl;
	cin >> data;
	while (data != 0)
	{
		NODE cur = (NODE)malloc(sizeof(struct  node));
		p->data = data;
		p->next = cur;
		p = cur;
		cin >> data;
	}

	p->data = 0;//多申请了一个cur的空间,我也不知道怎么把这个节点去掉,先
	             //先暂时将最后的数据置为0
	p->next = NULL;
	return pHead;
}
void showListData(NODE pHead)
{
	NODE p = pHead;
	cout << "链表的数据为:";
	while (p != NULL)
	{
		cout << p->data << " ";
		p = p->next;
	}
	cout << endl;
}
void deleteListData(NODE pHead)
{
	NODE p = pHead;
	NODE qCur,pCur,dCur;
	cout << "请输入你想要删除的数据:";
	int data; 
	cin >> data;
	/*if (p->data == data)
	{
		dCur = p;
		p = p->next;
		free(dCur);
	}*/
	while (p!=NULL)
	{
		if (p->data == data)
		{
			
			pCur = p;//1
			qCur->next = p->next;//2
			p = p->next;//3
			free(pCur);//4
			qCur = p;//5
		}	
	
		else
		{
			qCur = p;//6
			p = p->next;//7
		}
		
	
		
	}
}
int main()
{
	NODE pHead = creatlist();//创建链表
	pHead = insertData(pHead);//插入数据
	showListData(pHead);
	deleteListData(pHead);
	showListData(pHead);
	system("pause");

}

用STL就非常简单了,代码量还少,也不会有什么错误,但是STL那么多的函数还是要在平时的工作和学习中要多多总结

#include<iostream>
#include<list>
using namespace std;
void insertData(list<int> &ls)
{
	
	cout << "请输入数据,以0结束:" << endl;
	int data;
	cin >> data;
	while (data != 0)
	{
		ls.push_back(data);
		cin >> data;

	}
}
void showData(list<int> &ls)
{
	cout << "链表的数据为:" << endl;
	for (list<int>::iterator it = ls.begin(); it != ls.end(); it++)
	{
		cout << *it << " " ;
	}
	cout << endl;
}
void deleteData(list<int>&ls)
{
	int data;
	cout << "请输入你想要删除的数据:";
	cin >> data;
	ls.remove(data);
}
int main()
{
	list<int> ls;
	insertData(ls);
	showData(ls);
	deleteData(ls);
	showData(ls);
	system("pause");
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值