📄 linklist_student.cpp
字号:
#include <iostream.h>
#include <string.h>
typedef struct {
char num[8]; //学号
char name[20]; //姓名
int score; //成绩
}Student;
typedef struct LNode{
Student data; //数据域
struct LNode *next; //指针域
}LNode,*LinkList;
LinkList p;
void CreateList_L(LinkList &L,int n){ //尾插法
int i;
LinkList p,q;
L=new LNode;
L->next=NULL;
q=L;
for(i=0;i<n;i++){
p=new LNode;//生成新结点
cout<<"姓名:";
cin>>p->data.name;
cout<<"学号:";
cin>>p->data.num;
cout<<"成绩:";
cin>>p->data.score; //依次录入学生信息
p->next=q->next;
q->next=p;
q=p;
cout<<endl;
}
}
void PrintList_L(LinkList L){ //输出链序表内容
LinkList p;
p = new LNode;
p = L->next;
cout<<"姓名\t"<<"学号\t"<<"成绩"<<endl;
while(p){
cout<<p->data.name<<"\t"<<p->data.num<<"\t"<<p->data.score<<endl;
p = p->next;
}
cout<<endl;
}
int GetElem_L(LinkList L,int i){ //按位置查找
LinkList p;int j;
p=L->next; //初始化,p指向第一个结点
j=1; // j为计数器
while(p && j<i){
p=p->next;
++j;
}
if(!p||j>i){
cout<<"输入位置不合法!"<<endl;
return 0;
}
cout<<"所查学生姓名为:"<<p->data.name<<endl;
cout<<"所查学生学号为:"<<p->data.num<<endl;
cout<<"所查学生成绩为:"<<p->data.score<<endl;
return 1;
}
int LocateELem_L(LinkList L,char names[]) //按姓名查找
{
LinkList p;
p=L->next;
while(p){
if(strcmp(p->data.name,names)==0){
cout<<"学号为:"<<p->data.num<<endl;
cout<<"成绩为:"<<p->data.score<<endl;
return 1;
}
p=p->next;
}
cout<<"未找到此学生!"<<endl;
return 0;
}
int ListInsert_L(LinkList &L,int i,Student e){
LinkList s,p;
int j=0;
p=L;
while(p && j<i-1){p=p->next;++j;} //寻找第i-1个结点
if(!p||j>i-1){
cout<<"输入位置不合法!"<<endl;
return 0;
}
s=new LNode; //生成新结点
s->data=e; //插入L中
s->next=p->next;
p->next=s;
cout<<"该学生已插入顺序表!"<<endl;
return 1;
}
int ListDelete_L(LinkList &L,int i){ //删除指定位置
LinkList p,q;int j;
p=L; j=0;
while(p->next && j<i-1){
p=p->next;++j;
}
if(!(p->next) || j>i-1){
cout<<"输入的位置不合法!"<<endl;
return 0;
}
q=p->next; p->next=q->next;
cout<<"该学生已经删除!"<<endl;
return 1;
}
int ListLength_L(LinkList L){ //获取链表长度
LinkList p;int i;
p=L->next; //p指向第一个结点
i=0;
while(p){ //遍历单链表,统计结点数
i++;
p=p->next;}
return i;
}
void main(){
int no;
int num;
int locate;
char names[20];
LinkList L;
while(1){
cout<<"**************************** 欢迎使用学生信息管理系统!*************************"<<"\n";//菜单选项
cout<<"(1)输入学生信息"<<"\n";
cout<<"(2)逐个显示学生的相关信息"<<"\n";
cout<<"(3)根据姓名进行查找"<<"\n";
cout<<"(4)根据指定位置进行查找"<<"\n";
cout<<"(5)插入学生信息到指定位置"<<"\n";
cout<<"(6)删除指定位置的学生记录"<<"\n";
cout<<"(7)统计表中学生人数"<<"\n";
cout<<"(8)退出系统"<<"\n";
cout<<"\n";
cout<<"请选择您需要的服务:";
cin>>no;
switch(no){
case 1:cout<<"请输入学生个数:";
cin>>num;
CreateList_L(L,num);
break;
case 2:cout<<"";
PrintList_L(L);
break;
case 3:cout<<"请输入待查学生的姓名:";
cin>>names;
LocateELem_L(L,names);
break;
case 4:cout<<"请输入待查学生的位置:";
cin>>locate;
GetElem_L(L,locate);
break;
case 5:cout<<"请输入插入学生的位置:";
cin>>locate;
Student a;
cout<<"待插入学生姓名:";
cin>>a.name;
cout<<"待插入学生学号:";
cin>>a.num;
cout<<"待插入学生成绩:";
cin>>a.score;
ListInsert_L(L,locate,a);
break;
case 6:cout<<"请输入待删除学生位置:"<<endl;
cin>>locate;
ListDelete_L(L,locate);
break;
case 7:cout<<"表中学生人数为:"<<ListLength_L(L)<<endl; break;
case 8:cout<<"感谢使用!"<<endl;
return;
cout<<endl;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -