顺序表实现:
结构体:
#include<cstdio>
#include<iostream>
#include<string.h>
#define SIZE 100 //最大学生容量
using namespace std;
typedef struct {
char name[10]; //学生姓名
char sno[10]; //学生学号
float grade; //学生成绩
}stu;
typedef struct{
stu *data;
int length;
int size;
}Sqlist;
实现功能函数:
//初始化顺序表
Sqlist *createSqlist(int num);
//插入学生信息
void Insert(Sqlist *s);
//按学号查找学生信息
void FindBySno(Sqlist *s,char *sno);
//删除学生信息
void Delete(Sqlist *s,char *n);
//实现学生信息的输出
void output(Sqlist *s);
//实现不及格的查找
void Research(Sqlist *s);
//实现学生信息的修改
void change(Sqlist *s,int index);
函数实现以及主程序:
//创建顺序表
Sqlist *createSqlist(int num){
Sqlist *sq = (Sqlist *)malloc(sizeof(Sqlist));
sq->size = SIZE;
sq->data = (stu *)malloc(sizeof(stu));
sq->length = num;
for (int i = 0; i < num; ++i) {
cout<<"name:";
cin>>sq->data[i].name;
cout<<"sno:";
cin>>sq->data[i].sno;
cout<<"grade:";
cin>>sq->data[i].grade;
}
return sq;
}
//插入学生成绩信息
void Insert(Sqlist *s){
if(s->length==SIZE){
cout<<"该表已经满了";
}
printf("要插入的信息为:");
scanf("%s %s %f",&s->data[s->length].name ,&s->data[s->length].sno,&s->data[s->length].grade);
s->length++;
}
//按学号查找学生信息
void FindBySno(Sqlist *s,char *sno){
int i=0;
for (i = 0; i < s->length; ++i) {
if(strcmp(s->data[i].sno,sno)==0){
cout<<s->data[i].name<<'\t'<<s->data[i].sno<<'\t'<<s->data[i].grade<<endl;
}
if(i==s->length){
cout<<"查无此人";
}
}
}
//修改学生数据
void change(Sqlist *s,int index){
cout<<"选择你想修改的属性:1.姓名,2.学号,3.成绩"<<endl;
int option;
cin>>option;
if(option==1){
cout<<"输入你想修改的值"<<endl;
char a[10];
cin>>a;
strcpy(s->data[index-1].name,a);
}
if(option==2){
cout<<"输入你想修改的值"<<endl;
char b[10];
cin>>b;
strcpy(s->data[index-1].sno,b);
}
if(option==3){
cout<<"你想修改的值"<<endl;
float m;
cin>>m;
s->data[index-1].grade = m;
}
}
//删除学生信息
void Delete(Sqlist *s,char *n){
int index;
for(int i = 0;i<s->length;i++){
if(strcmp(s->data[i].sno,n)==0){
//查找对应学生的次序
index = i;
break;
}
}
for(int j = index;j<s->length;j++){
s->data[j]=s->data[j+1];
}
s->length--;
}
//实现不及格的查找
void Research(Sqlist *s){
for(int i = 0;i<s->length;i++){
if(s->data[i].grade<60.0){
cout<<s->data[i].name<<'\t'<<s->data[i].sno<<'\t'<<s->data[i].grade<<endl;
}
}
}
//实现学生信息的输出
void output(Sqlist *s){
cout<<"姓名"<<'\t'<<"学号"<<'\t'<<"成绩"<<endl;
for(int i = 0;i<s->length;i++){
cout<<s->data[i].name<<'\t'<<s->data[i].sno<<'\t'<<s->data[i].grade<<endl;
}
}
int main(){
Sqlist *p;
int num;
cout<<"初始学生数量为:";
cin>>num;
p = createSqlist(num);
output(p);
cout<<"******学生成绩管理系统******"<<endl;
cout<<"选择1:按学号查找对应学生"<<endl;
cout<<"选择2:插入学生信息"<<endl;
cout<<"选择3:修改学生信息"<<endl;
cout<<"选择4:删除学生信息"<<endl;
cout<<"选择5:输出所有学生信息"<<endl;
cout<<"选择6:查找所有不及格学生"<<endl;
cout<<"选择-1:退出学生成绩管理系统"<<endl;
int option;
cout<<"输入你的选择"<<endl;
cin>>option;
if(option==-1){
exit(0);
}
while(option!=-1){
cout<<"输入你的选择"<<endl;
cin>>option;
switch (option) {
case 1:
char a[10];
cout<<"请输入要寻找的学生的学号"<<endl;
scanf("%s",&a);
FindBySno(p,a);
break;
case 2:
cout<<"插入学生信息";
Insert(p);
break;
case 3:
int index;
cout<<"需要修改的学生排名";
cin>>index;
change(p,index);
break;
case 4:
char b[10];
cout<<"请输入要删除学生的学号"<<endl;
scanf("%s",&b);
Delete(p,b);
break;
case 5:
output(p);
break;
case 6:
Research(p);
break;
case -1:
exit(0);
default:
cout<<"输入-1退出学生成绩管理系统"<<endl;
}
}
}
单链表:
结构体:
#include<cstdio>
#include<iostream>
#include<string.h>
#define SIZE 100
using namespace std;
typedef struct {
char name[10]; //学生姓名
char sno[10]; //学生学号
float grade; //学生成绩
}stu;
typedef struct LNode{
stu data;
struct LNode *next;
}LNode;
功能实现函数:
//初始化顺序表
LNode *createSqlist();
//插入学生信息
void Insert(LNode *s);
//按学号查找学生信息
void FindBySno(LNode *s,char *sno);
//删除学生信息
void Delete(LNode *s,char *n);
//实现学生信息的输出
void output(LNode *s);
//实现不及格的查找
void Research(LNode *s);
//实现学生信息的修改
void change(LNode *s,char *sno);
函数实现以及主程序:
//创建单链表
LNode *createSqlist(){
LNode *head = (LNode *)malloc(sizeof(LNode)); //建立头结点
head->next = NULL;
cout<<"请输入初始的学生数量"<<endl;
int num;
cin>>num;
LNode *tail;
tail = head;
for (int i = 0; i < num ; ++i) {
LNode *p = (LNode *)malloc(sizeof(LNode));
cout<<"姓名为:";
cin>>p->data.name;
cout<<"学号为:";
cin>>p->data.sno;
cout<<"成绩为:";
cin>>p->data.grade;
tail->next = p;
tail = tail->next;
tail->next = NULL;
}
//返回头结点
return head;
}
//实现学生成绩的插入
void Insert(LNode *s){
while(s->next!=NULL){
s = s->next; //找到尾结点
}
LNode *Tail = (LNode *)malloc(sizeof(LNode));
cout<<"要插入的姓名为:";
cin>>Tail->data.name;
cout<<"要插入的学号为:";
cin>>Tail->data.sno;
cout<<"要插入的成绩为:";
cin>>Tail->data.grade;
s->next = Tail;
Tail->next = NULL;
}
//实现学生的查找
void FindBySno(LNode *s,char *sno){
while(s!=NULL){
if(strcmp(s->data.sno,sno)==0){
cout<<s->data.name<<'\t'<<s->data.sno<<'\t'<<s->data.grade<<endl;
break;
}
s = s->next;
}
}
//删除学生信息
void Delete(LNode *s,char *n){
LNode *p,*q;
for(p=s,q=s->next;q!=NULL;p=p->next,q=q->next)
{
if(!strcmp(q->data.sno,n))
{
p->next=q->next;
free(q);
}
}
}
//实现不及格的查找
void Research(LNode *s){
while(s!=NULL){
if(s->data.grade<60){
cout<<s->data.name<<'\t'<<s->data.sno<<'\t'<<s->data.grade<<endl;
}
s = s->next;
}
}
//实现学生信息的修改
void change(LNode *s,char *sno){
while(s!=NULL){
if(strcmp(s->data.sno,sno)==0){
cout<<"选择你想修改的属性:1.姓名,2.学号,3.成绩"<<endl;
int option;
cin>>option;
if(option==1){
cout<<"输入你想修改的值"<<endl;
char a[10];
cin>>a;
strcpy(s->data.name,a);
}
if(option==2){
cout<<"输入你想修改的值"<<endl;
char b[10];
cin>>b;
strcpy(s->data.sno,b);
}
if(option==3){
cout<<"你想修改的值"<<endl;
float m;
cin>>m;
s->data.grade = m;
}
}
s = s->next;
}
}
//输出全部学生信息
void output(LNode *s){
cout<<"姓名"<<'\t'<<"学号"<<'\t'<<"成绩"<<endl;
while(s!=NULL){
cout<<s->data.name<<'\t'<<s->data.sno<<'\t'<<s->data.grade<<endl;
s = s->next;
}
}
int main(){
LNode *p;
cout<<"******学生成绩管理系统******"<<endl;
cout<<"选择1:按学号查找对应学生"<<endl;
cout<<"选择2:插入学生信息"<<endl;
cout<<"选择3:修改学生信息"<<endl;
cout<<"选择4:删除学生信息"<<endl;
cout<<"选择5:输出所有学生信息"<<endl;
cout<<"选择6:查找所有不及格学生"<<endl;
cout<<"选择-1:退出学生成绩管理系统"<<endl;
p = createSqlist();
output(p->next);
int option;
while(option!=-1){
cout<<"输入你的选择"<<endl;
cin>>option;
switch (option) {
case 1:
char a[10];
cout<<"请输入要寻找的学生的学号"<<endl;
scanf("%s",&a);
FindBySno(p->next,a);
break;
case 2:
cout<<"插入学生信息";
Insert(p->next);
break;
case 3:
char c[10];
cout<<"需要修改的学生学号";
cin>>c;
change(p->next,c);
break;
case 4:
char b[10];
cout<<"请输入要删除学生的学号"<<endl;
scanf("%s",&b);
Delete(p,b);
break;
case 5:
output(p->next);
break;
case 6:
Research(p->next);
break;
case -1:
exit(0);
default:
cout<<"输入-1退出学生成绩管理系统"<<endl;
}
}
}
单链表查找是按照学号进行查找,顺序表是按照学生排名次序进行查找
代码并不是纯c++写法,对c++和c并不是非常熟悉
写的比较粗糙 有问题欢迎探讨