数据结构-线性表的插入删除查找

小编受前辈恩惠,加上自己的理解,编写了线性表的基本操作。供下一届参考交流。

#include<iostream> //包含cin cout
using namespace std; //与 #include<iostream>一起使用,正确使用命名空间 
//定义链表
typedef struct LNode {
	string name;
	string xuanshangjin;
	LNode *next;
}LNode,*LinkList;
//初始化链表,把原始数据导入
void InitList(LinkList &L) {
	L = new LNode;
	L->next = NULL;
	//建立数组放置数据
	string a[9] = { "路飞","索隆","山治","乔巴","乌索普","娜美","罗宾","弗兰奇","布鲁克"};
	string b[9] = { "价值1500000000贝利","价值320000000贝利","价值330000000贝利","价值100贝利","价值200000000贝利","价值66000000贝利","价值130000000贝利","价值94000000贝利","价值83000000贝利"};
	LinkList p = L;
	//将数据库中元素循环导入链表
	for (int i = 0;i < 9;i++) 
	{
		LinkList q = new LNode;//通过循环不断给q分配新节点空间 
		q->name = a[i];
		q->xuanshangjin = b[i];
		q->next =NULL;
		p->next=q; //头节点指向首元节点 
		p = q;//通过指针p的移动使得链表存储数据 
	}
}
//打印悬赏信息 
void PrintList(LinkList &L) 
{
	LinkList p;
	p = L->next;
	while(p) {
		cout << p->name << "   "<< p->xuanshangjin<< endl;
		p = p->next;
	}
	//暂停加清屏
	system("pause"); //若没有system("pause")则无法看到运行结果 
	system("cls");   //拥有此操作,按 enter显示内容就会消失 
}
//查找悬赏对象 
void NameLocate(LinkList&L) {
	string Name;
	int flag = 0;
	cout << "请赏金猎人输入您的目标" << endl;
	cin >> Name;
	LinkList p = L->next;
	while (p) {
		if (p->name == Name) {
			cout << "查找成功,猎杀对象信息为:" << endl;
			cout << p->name << "   " << p->xuanshangjin << endl;
			flag = 1;
		}
		p = p->next;
	}
	if (flag == 0)
		cout << "查找失败" << endl;
}
//插入新成员 
void InsertList(LinkList &L) {
	int i,j=0;
	cout << "您要在第几个成员前添加新元素:" << endl;
	cin >> i;
	LinkList p = L;
	//将p指针循环后移至第i-1个元素
	while (p && (j < i - 1)) {
		p = p->next;
		j++;
	}
	LinkList s = new LNode;  //开辟新节点 
	cout << "输入成员姓名" << endl;
	cin >> s->name;
	cout << "输入悬赏金额" << endl;
	cin >> s->xuanshangjin;
	s->next = p->next;  //次序不能交换 
	p->next = s;
}
//删除无威胁成员 
void DelList(LinkList &L) {
	int i, j = 0;
	cout << "您要删除第几个成员:" << endl;
	cin >> i;
	LinkList p = L;
	//将p指针后移至第i-1个元素
	while (p && (j < i - 1)) {
		p = p->next;
		j++;
	}
	//在逻辑上删除第i个元素
	p->next = p->next->next;
}
void ShowMenu() {
	cout << "*******欢迎您进入总部悬赏管理系统*******" << endl;
	cout << "***************首次操作请先按0****************" << endl;
	cout << "***************0.悬赏信息汇总***************" << endl;
	cout << "***************1.查找目标人物信息*********************" << endl;
	cout << "***************2.插入新的悬赏人物*********************" << endl;
	cout << "***************3.删除无威胁的悬赏人物*********************" << endl;
	cout << "***************4.退出系统,欢迎再次光临*********************" << endl;
}
int main() 
{
	LinkList L;
	int i;
	//循环直至悬赏管理者退出
	while (1)  //可以保证一直在操作界面,除非操作者结束运行 
	{
		ShowMenu();
		cout << "请输入您的操作" << endl;
		cin >> i;
		switch (i) {
		//0.显示悬赏对象列表 
		case 0: {
			InitList(L);
			PrintList(L);
			break;
		}
		//查找悬赏人物信息 
		case 1: {
			NameLocate(L);
			break;
		}
		//插入新的悬赏对象 
		case 2: {
			InsertList(L);
			PrintList(L);
			break;
		}
		//删除元素无威胁的悬赏对象 
		case 3: {
			DelList(L);
			PrintList(L);
			break;
		}
		//退出系统
		case 4: {
			exit(0);
			break;
		}
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值