(1)基于顺序存储的源程序清单
#include<iostream.h>
#include<string.h>
#include<iomanip.h>
using namespace std;
typedef int Status;
#define OK 1
#define ERROR 0
#define Maxsize 50
//学生信息的定义
typedef struct
{
char no[10]; //10 位学号
char name[20]; //姓名
int score; //成绩
}Student;
//顺序表的定义
typedef struct
{
Student *elem; //指向数据元素的基地址
int length; //线性表的当前长度
}SqList;
void CreatList(SqList &L,int n);//根据指定学生个数 n,逐个输入学生信息;
void OutputList(SqList L);//逐个显示学生表中所有学生的相关信息;
void FindList(SqList &L,char name[]);//根据姓名进行查找,返回此学生的学号和成绩;
void GetList(SqList L,int i);//根据指定位置i可返回相应学生信息(学号,姓名,成绩);
Status InsertList(SqList &L,int i,Student stu);//给定学生信息,插入到表中指定的位置;
Status DeleteList(SqList &L,int i);// 删除指定位置的学生记录;
Status CountList(SqList L);// 统计表中学生个数。
Status menu();//显示菜单
int main()
{
SqList L;
L.length=0;
Student stu;
int n;//总人数
int i,m;
char a;
char no[10]; //10 位学号
char name[20]; //姓名
int score; //分数
cout<<"请输入学生的个数:\n";
cin>>n;
CreatList(L,n);
cout<<"依次显示学生表中所有学生的相关信息:\n";
OutputList(L);
menu();
while(1)
{
cout<<"请输入功能选项:";
cin>>a;
//判断功能是否存在,不存在就重新输入
while(a!='i'&&a!='I'&&a!='d'&&a!='D'&&a!='f'&&a!='F'&&a!='c'&&a!='C'&&
a!='o'&&a!='O'&&a!='g'&&a!='G'&& a!='q'&&a!='Q')
{
cout<<"暂时没有此功能,请重新输入:";
fflush(stdin);
cin>>a;
}
switch(a)
{
case 'i':
case 'I':
cout<<"请输入要插入的位置:";
cin>>i;
cout<<"请输入学号:"<<endl;
cin>>stu.no;
cout<<"请输入姓名:"<<endl;
cin>>stu.name;
cout<<"请输入成绩:"<<endl;
cin>>stu.score;
InsertList(L,i,stu);
OutputList(L);
break;
case 'd':
case 'D':
cout<<"请输入要删除的位置:";
cin>>i;
DeleteList(L,i);
OutputList(L);
break;
case 'f':
case 'F':
cout<<"请输入要查找的学生名:";
cin>>name;
FindList(L,name);
break;
case 'c':
case 'C':
cout<<"统计的学生个数为:"<<CountList(L)<<endl;
break;
case 'o':
case 'O':
OutputList(L);
break;
case 'g':
case 'G':
cout<<"请输入要查找的位置:";
cin>>m;
GetList(L,m);
break;
default:
return 0;
}
}
return 0;
}
Status menu() //显示菜单
{
cout<<"----------------------\n";
cout<<"插入功能请输 i 或 I\n";
cout<<"删除功能请输 d 或 D\n";
cout<<"查找功能请输 f 或 F\n";
cout<<"求学生人数请输入 c 或 C\n";
cout<<"输出功能请输 o 或 O\n";
cout<<"定位功能请输 g 或 G\n";
cout<<"退出功能请输 q 或 Q\n"; //以上为功能介绍
cout<<"----------------------\n";
fflush(stdin);
}
void CreatList(SqList &L,int n) //根据指定学生个数,逐个输入学生信息;
{
int i;
for(i=0;i<n;i++)
{
cout<<"请输入第"<<i+1<<"个学生的信息:"<<endl;
cout<<"请输入学号:"<<endl;
cin>>L.elem[i].no;
cout<<"请输入姓名:"<<endl;
cin>>L.elem[i].name;
cout<<"请输入成绩:"<<endl;
cin>>L.elem[i].score;
L.length++;
}
}
void OutputList(SqList L)//逐个显示学生表中所有学生的相关信息;
{
int i;
for(i=0;i<L.length;i++)
{
cout<<"学生学号:"<<L.elem[i].no<<endl;
cout<<"学生姓名:"<<L.elem[i].name<<endl;
cout<<"学生成绩:"<<L.elem[i].score<<endl;
}
}
Status InsertList(SqList &L,int i,Student stu)//给定一个学生信息,插入到表 中指定的位置;
{
int m;
if(i<1||i>L.length+1||L.length==Maxsize)
{
cout<<"无法插入!"<<endl;
}
else
{
for(m=L.length-1;m>=i-1;m--)//循环后移
{
L.elem[m+1]=L.elem[m];
}
L.elem[i-1]=stu;
L.length++;
return OK;
}
}
Status DeleteList(SqList &L,int i)// 删除指定位置的学生记录;
{
int j;
if(i<1||i>L.length+1)
return ERROR;
for(j=i;j<=L.length-1;j++)
{
L.elem[j-1]=L.elem[j];
}
L.length--;
return OK;
}
void FindList(SqList &L,char name[])//根据姓名进行查找,返回此学生的学号和成绩;
{
int i;
for(i=0;i<L.length;i++)
{
if(strcmp(L.elem[i].name,name)==0)
break;
}
if(i>=L.length)
cout<<"表中没有该学生!"<<endl;
else
cout<<"学号:"<<L.elem[i].no<<endl
<<"成绩:"<<L.elem[i].score<<endl;
}
Status CountList(SqList L)// 统计表中学生个数。
{
return L.length;
}
void GetList(SqList L,int i)//根据指定的位置 i 可返回相应的学生信息(学号,姓名,成绩);
{
if(i<1||i>L.length+1)
cout<<"查找有误!"<<endl;
else
cout<<"学号:"<<L.elem[i-1].no<<endl
<<"姓名:"<<L.elem[i-1].name<<endl
<<"成绩:"<<L.elem[i-1].score<<endl;
}
(2)基于链式存储的源程序清单
#include<iostream.h>
#include<string.h>
#include<iomanip.h>
using namespace std;
typedef int Status;
#define OK 1
#define ERROR 0
#define Maxsize 50
//学生信息的定义
typedef struct
{
char no[10]; //10 位学号
char name[20]; //姓名
int score; //成绩
}Student;
typedef struct LNode
{
Student data;
struct LNode *next;
}LNode,*LinkList;
Status InitList(LinkList &L);//构造一个空的单链表L
void CreatList(LinkList &L,int n);//根据指定学生个数 n,逐个输入学生信息;
void OutputList(LinkList L);//逐个显示学生表中所有学生的相关信息;
void FindList(LinkList &L,char name[]);//根据姓名查找,返回此学生的学号和成绩;
void GetList(LinkList L,int i);//指定位置i可返回相应学生信息(学号,姓名,成绩);
Status InsertList(LinkList &L,int i,Student stu);//给定学生信息,插入表中指定的位置;
Status DeleteList(LinkList &L,int i);// 删除指定位置的学生记录;
Status CountList(LinkList L);// 统计表中学生个数。
Status menu();//显示菜单
int main()
{
LinkList L;
Student stu;
int n;//总人数
int i,m;
char a;
char no[10]; //10 位学号
char name[20]; //姓名
int score; //分数
cout<<"请输入学生的个数:\n";
cin>>n;
CreatList(L,n);
cout<<"依次显示学生表中所有学生的相关信息:\n";
OutputList(L);
menu();
while(1)
{
cout<<"请输入功能选项:";
cin>>a;
//判断功能是否存在,不存在就重新输入
while(a!='i'&&a!='I'&&a!='d'&&a!='D'&&a!='f'&&a!='F'&&a!='c'&&a!='C'&&
a!='o'&&a!='O'&&a!='g'&&a!='G'&& a!='q'&&a!='Q')
{
cout<<"暂时没有此功能,请重新输入:";
fflush(stdin);
cin>>a;
}
switch(a)
{
case 'i':
case 'I':
cout<<"请输入要插入的位置:";
cin>>i;
cout<<"请输入学号:"<<endl;
cin>>stu.no;
cout<<"请输入姓名:"<<endl;
cin>>stu.name;
cout<<"请输入成绩:"<<endl;
cin>>stu.score;
InsertList(L,i,stu);
break;
case 'd':
case 'D':
cout<<"请输入要删除的位置:";
cin>>i;
DeleteList(L,i);
OutputList(L);
break;
case 'f':
case 'F':
cout<<"请输入要查找的学生名:";
cin>>name;
FindList(L,name);
break;
case 'c':
case 'C':
cout<<"统计的学生个数为:"<<CountList(L)<<endl;
break;
case 'o':
case 'O':
OutputList(L);
break;
case 'g':
case 'G':
cout<<"请输入要查找的位置:";
cin>>m;
GetList(L,m);
break;
default:
return 0;
}
}
return 0;
}
Status menu()
{
cout<<"----------------------\n";
cout<<"插入功能请输 i 或 I\n";
cout<<"删除功能请输 d 或 D\n";
cout<<"查找功能请输 f 或 F\n";
cout<<"求学生数请输入 c 或 C\n";
cout<<"输出功能请输 o 或 O\n";
cout<<"定位功能请输 g 或 G\n";
cout<<"退出功能请输 q 或 Q\n"; //以上为功能介绍
cout<<"----------------------\n";
fflush(stdin);
}
Status InitList(LinkList &L)//构造一个空的单链表L
{
L=new LNode;
L->next=NULL;
return OK;
}
void CreatList(LinkList &L,int n)//根据指定学生个数 n,逐个输入学生信息;
{
int i;
LNode *r, *p;
L=new LNode;
L->next=NULL;
r=L; //尾指针r指向头结点
for(i=0;i<n;i++)
{
p = new LNode;//生成新节点p
cout<<"请输入第"<<i+1<<"个学生的信息:"<<endl;
cout<<"请输入学号:"<<endl;
cin>>p->data.no;
cout<<"请输入姓名:"<<endl;
cin>>p->data.name;
cout<<"请输入成绩:"<<endl;
cin>>p->data.score;
p->next=NULL;
r->next=p;
r=p;
}
}
void OutputList(LinkList L)//逐个显示学生表中所有学生的相关信息;
{
LNode *p;
p=L->next;
while(p)
{
cout<<"学生学号:"<<p->data.no<<endl;
cout<<"学生姓名:"<<p->data.name<<endl;
cout<<"学生成绩:"<<p->data.score<<endl;
p=p->next;
}
}
Status DeleteList(LinkList &L,int i)// 删除指定位置的学生记录;
{
int j=0;
LNode *p,*q;
p=L;
while((p->next)&&(j<i-1))
{
p=p->next;
j++;
}
if(!(p->next)||(j>i-1))
return ERROR;
q=p->next;
p->next=q->next;
delete q;
return OK;
}
void FindList(LinkList &L,char name[])//根据姓名进行查找,返回此学生的学号和成绩;
{
LNode *p;
p=L->next;
while(p && strcmp(p->data.name,name)!=0)
{
p=p->next;
}
if(p==NULL)
cout<<"表中没有该学生!"<<endl;
else
cout<<"学号:"<<p->data.no<<endl
<<"成绩:"<<p->data.score<<endl;
}
Status CountList(LinkList L)// 统计表中学生个数。
{
int cnt=0;
LNode *p;
p=L->next;
while(p)
{
p=p->next;
cnt++;
}
return cnt;
}
void GetList(LinkList L,int i)//根据指定的位置 i 可返回相应的学生信息(学号,姓名,成绩);
{
LNode *p;
int j=1;
p=L->next;
while(p && j<i)
{
p=p->next;
j++;
}
if(!p||j>i)
cout<<"表中没有该学生!"<<endl;
else
cout<<"学号:"<<p->data.no<<endl
<<"姓名:"<<p->data.name<<endl
<<"成绩:"<<p->data.score<<endl;
}
Status InsertList(LinkList &L,int i,Student stu)//给定学生信息,插入到表中指定的位置;
{
LNode *p,*s;
p=L;
int j=0;
while(p && (j<i-1))
{
p=p->next;
j++;
}
if(!p||j>i-1)
return ERROR;
s=new LNode;
s->data=stu;
s->next=p->next;
p->next=s;
return OK;
}
网友评论