声明:本人刚接触数据结构,现在在自学中,写博客是一种总结,也给大家参考一下,代码有错,大家可以指出批评。
注意事项:该实现顺序表运用的是c++,其中包含c++的&应用符号 c语言运用指针*。
程序思想:
1:代码整体框架
2:编写思想
3:算法分析
4:代码实现
#include<iostream>
using namespace std;
#define N 100
typedef struct student
{
int age[N];
string name[N];
int length;
}sqlist;
void initiallist(sqlist& l)
{
l.length = 0;
cout << "顺序表初始化成功" << endl;
}//顺序表初始化
void listisempty(sqlist& l)
{
if (!l.length)
{
cout << "该表是空表" << endl;
}
else cout << "该表不是空表" << endl;
}//判断顺序表是否为空
void listfull(sqlist& l,int t)
{
int i;
cout << endl << "现在开始录入数据" << endl;
for (i = 0; i < t; i++)
{
cout << "请输入第" << i << "个学生的姓名" << endl;
cin >> l.name[i];
cout << "请输入第" << i << "个学生的年龄" << endl;
cin >> l.age[i];
l.length++;
}
}//顺序表的录入
void getelem(sqlist& l)
{
int i;
cout << "请输入数据位置" << endl;
cin >> i;
if (i < 0 || i > l.length - 1)
cout << "error" << endl;
else
cout << "姓名为" << l.name[i ] << "年龄为" << l.age[i ] << endl;
}//输出第i个元素包含的内容
void outputlist(sqlist& l)
{
int i;
for (i = 0; i < l.length; i++)
{
cout << "第" << i << "个同学的信息如下:" << '\t' << endl;
cout << l.name[i] << l.age[i] << endl;
}
}//顺序表里的数据输出
int listlength(sqlist& l)
{
return l.length;
}//返回顺序表当前长度
void listdelete(sqlist& l)//删除第i位置的元素
{
int i;
cout << "请输入删除元素的位置" << endl;
cin >> i;
if (i < 0 || i > l.length - 1)
cout << "false" << endl;
else
{
for (int j = i; j < l.length; j++)//遍历到顺序表最后t,全部向前移动
{
l.age[j] = l.age[j + 1];
l.name[j] = l.name[j + 1];
}
l.length--;
}
return ;
}//顺序表的删除
void listfind(sqlist& l)
{
int i; string fnm;
cout << "请输入同学的名字" << endl;
cin >> fnm;
for (i = 0; i < l.length; i++)
{
if (l.name[i] == fnm)
{
cout << "找到该同学" << "信息如下" << endl;
cout << "年龄为" << l.age[i] << '\t' << "表中的位置是" << i << endl;
return;
}
}
cout << "没有找到该同学,可能名字出错,可能没有此人,请检查" << endl;
return;
}
//顺序表的查找
sqlist insertbf(sqlist & l)
{
int t, b, i;
string nm;
cout << "请输入你要插入数据的位置" << endl;
cin >> b;
if (l.length == N)
{
cout << "error" << endl;
return l;
}
if (b< 0 || b>l.length )
{
cout << "error" << endl;
return l;
}
for (t = l.length; t>b;t--)
{
l.age[t] = l.age[t-1];
l.name[t] = l.name[t-1 ];
}//从j开始向后移动
++l.length;
cout << "请输入插入同学的名字" << endl;
cin >> nm;
cout << "请输入插入同学的年龄" << endl;
cin >> i;
l.name[b ] = nm;
l.age[b] = i;
//因为插入元素表长加1
return l;
}//在指定位置插入数据
void listfindput(sqlist& l)
{
string fnm;
cout << "请输入你要查找同学的名字" << endl;
cin >> fnm;
for (int i = 0; i < l.length; i++)
{
if (l.name[i] == fnm)
{
cout << "找到该同学的位置是" << i << endl;
return;
}
}
cout << "没有找到该同学" << "可能名字输错" << endl;
return;
}//输出某个元素的位置
void insertleast(sqlist &l)
{
int a;
string nm;
if (l.length == N)
{
cout << "表满了不能插入数据了" << endl;
return;
}
else
{
cout << "请输入同学的名字" << endl;
cin >> nm;
cout << "请输入同学的年龄" << endl;
cin >> a;
l.age[l.length] = a;
l.name[l.length] = nm;
}
l.length++;
return;
}//表最后插入数据
void listreplace(sqlist& l)
{
int age; string nm, fnm;
cout << "请输入你要查找同学的名字" << endl;
cin >> fnm;
for (int i = 0; i < l.length; i++)
{
if (l.name[i] == fnm)
{
cout << "请输入修改的名字为" << endl;
cin >> nm;
cout << "输入修改的年龄为" << endl;
cin >> age;
l.age[i] = age;
l.name[i] = nm;
}
}
return ;
}//顺序表数据的替换/修改
void deletelist(sqlist& l)
{
l.length = 0;
cout << "顺序表清空" << endl;
cout << "顺序表的长度为" << l.length << endl;
return;
}//顺序表清空,顺序表长度为0.
int main()
{
int a, t;
sqlist l;
student c;
string fnm;
cout << "请输入选项前数字进行顺序表的操作" << endl;
cout << "1.顺序表初始化" << '\t' << "2.判断是否为空表" << '\t' << "3.顺序表的输入" << endl;
cout << "4.全表的输出" << '\t' << "5.求全表的长度" << endl;
cout << "6.输入序号删除元素" << '\t' << "7.用名字查找某个同学的序号" << endl;
cout << "8.用同学名字查找其信息" << '\t' << "9.用学生序号查找学生的信息" << endl;
cout << "10.将顺序表里面某个同学信息换成他人" << '\t' << "11.在顺序表插入指定的位置" << endl;
cout << "12.在顺序表最后一个位置位置插入" << '\t' << "13.链表清空" << endl;
cin >> a;
while (1)
{
switch (a)
{
case 1:initiallist(l); break;//顺序表初始化
case 2:listisempty(l); break;//判断顺序表是不是空表
case 3:cout << "请输入你要输入学生的个数" << endl;
cin >> t; listfull(l,t); break;//全表输入
case 4:outputlist(l); break;//全表输出
case 5:cout << "顺序表长度为" << listlength(l) << endl; break;//顺序表的长度
case 6:
listdelete(l); break;//删除顺序表的元素
case 7:
listfindput(l); break;//用某个同学名字查找其序号
case 8:
listfind(l); break;//用某个同学的名字查找其信息
case 9:
getelem(l); break;
case 10:
listreplace(l); break;//将顺序表里面的某个同学的所有信息换成别人
case 11:
l=insertbf(l);break;//数据前一个位置插入
case 12:
insertleast(l); break;//表最后插入数据
case 13:
deletelist(l); break;//链表清空
}
cout << "退出请输入0" << endl;
cin >> a;
if (a == 0)
break;
else
{
cout << "请输入选项前数字继续进行顺序表的操作" << endl;
}
}
cout << "欢迎你的使用" << endl;
return 0;
}
————————————————
版权声明:本文为CSDN博主「weixin_52913841」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_52913841/article/details/117148566