⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 linklist_student.cpp

📁 这是一个学生信息的链表表现绝对正确可用,提供创建、删除、插入、查找、排序等功能
💻 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 + -