编译环境;DevC++5.11
代码:
#include <bits/stdc++.h>
#define MaxSize 10
using namespace std;
//1.学生信息结构体
struct student{
string name;
double scores;
};
//2.顺序表结构体
typedef struct{
student data[MaxSize];//元素数组
int length;//顺序表的长度
}SqList;
//3.顺序表初始化
void InitSqList(SqList &s){
s.length = 0; //初始化顺序表长度,默认为0
}
//4.顺序表的建立
bool CreateList(SqList &s,int len){
bool flag;
if(s.length<0 || s.length>MaxSize)
flag = false;//如果表长<0或者>最大长度,返回false
else{
printf("请输入学生 姓名 与 成绩:\n");
for(int i = 0;i < len;i++){
cin >> s.data[i].name >> s.data[i].scores;
s.length++;
}
flag = true;
}
return flag;
}
//5.顺序表元素的插入
//函数形参: 要插入的顺序表,插入位置,插入元素
//两种情况不能插入:(1)顺序表已经满了(2)插入位置无效
bool InsertSqList(SqList &s,int i,student e){
bool flag;
if(s.length == MaxSize){ //第一种情况
flag = false;
printf("顺序表已满!\n");
}
if(i<1 || i>s.length+1){ //第二种情况
flag = false;
printf("插入位置无效!\n");
}
if(i <= s.length){//在表的中间插元素
for(int k = s.length-1;k >= i-1;k--)
s.data[k+1] = s.data[k]; //插入位置之后的元素都往后挪位
s.data[i-1] = e;
s.length++;
flag = true;
}
if(i == s.length+1){
s.data[i-1] = e;
s.length++;
flag = true;
}
return flag;
}
//6.顺序表元素的删除
//函数形参:(1)要删除元素的表(2)删除的位置
//两种情况不能删除:(1)顺序表为空 (2)删除的位置无效
bool DeleteSqList(SqList &s,int i){
bool flag;
if(s.length == 0){ //第一种情况
cout << "线性表为空" << endl;
flag = false;
}
if(i<1 || i>s.length){ //第二种情况
cout << "删除位置无效!" << endl;
flag = false;
}
if(i <= s.length){
for(int j = i;j <= s.length-1;j++)
s.data[j-1] = s.data[j];
flag = true;
}
s.length--;
return flag;
}
//7.顺序表元素的查找
//函数形参:(1)要查找的元素的表 (2)查找的元素
//思路:遍历顺序表,如果相等则返回元素的位置,否则返回0
int findSqList(SqList &s,student e){
for(int i = 0;i < s.length;i++){
if(s.data[i].name == e.name /*&& s.data[i].scores == e.scores*/)
return i+1;
}
return 0;
}
//以下为具体操作函数,方便实现菜单的功能
//8.顺序表元素的展示
//函数形参: (1)要展示元素的顺序表
void Show(SqList &s){
printf("姓名 成绩\n");
for(int i = 0;i < s.length;i++)
cout << s.data[i].name << "\t" << s.data[i].scores << endl;
}
//9. 创建顺序表
void Create(SqList &s){
int len;
InitSqList(s);//先初始化顺序表
printf("输入顺序表长度:");
cin >> len;
bool flag = CreateList(s,len);
if(flag != false){
printf("顺序表创建成功!\n");
Show(s);
}else
printf("顺序表创建失败!\n");
}
//10.插入元素
void Insert(SqList &s){
student e;
int place;
printf("请输入要插入的位置与元素:");
cin >> place >> e.name >>e.scores;
bool flag = InsertSqList(s,place,e);
if(flag != false){
cout << "顺序表插入元素成功!" << endl;
Show(s);
}else
printf("插入失败!\n");
}
//11.查找函数
void Find(SqList &s){
student e;
printf("请输入要查找的线性表元素:");
cin >> e.name;
bool flag = findSqList(s,e);
if(flag != false){
cout << "线性表查找元素成功!" << endl;
printf("以下是被查找元素的信息\n");
printf("姓名 成绩\n");
cout << s.data[findSqList(s,e)-1].name << "\t" << s.data[findSqList(s,e)-1].scores << endl;
}else
printf("查找失败!\n");
}
//12.删除函数
void Delete(SqList &s){
int place;
printf("请输入要删除的元素位置:");
cin >> place;
bool flag = DeleteSqList(s,place);
if(flag != false){
cout << "线性表删除元素成功!" << endl;
Show(s);
}else
printf("删除失败!\n");
}
//13.菜单函数
void menu(){
printf("********1.创建\t 2.插入********\n");
printf("********3.查找\t 4.删除********\n");
printf("********** 5.退出 **********\n");
}
int main(){
SqList l;
int selection;
char x;
printf("学生信息录入小程序\n");
printf("温馨提示: 请先创建一个顺序表!\n");
printf("----------------\n");
while(!0){
menu();
printf("请输入菜单选项:");
cin >> selection;
if(selection == 5)
break;
if(cin.fail()){
printf("输入非法!");
break;
}
switch(selection){
case 1: Create(l) ;break;
case 2: Insert(l);break;
case 3: Find(l) ;break;
case 4: Delete(l);break;
default: printf("输入错误,请重新输入!\n");
}
}
return 0;
}
运行结果: