小编受前辈恩惠,加上自己的理解,编写了线性表的基本操作。供下一届参考交流。
#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;
}
}
}
}