线性表的基本操作及其应用

#include<iostream> 
#include<stdio.h>
#include<string.h>
#include<stdlib.h> 
#define MAXSIZE 10000	//顺序表可能达到的最大长度 
#define ERROR 0
#define OVERFLOW -1 
#define Status int
using namespace std;

typedef struct{
	char name[10]; //姓名
	int  no;  //学号 
	int score;    //成绩 
}Student;

typedef struct{
	Student *elem; //储存空间的基地址
	 int length;  //当前长度 
}SqList; 		//顺序表的结构类型为 SqList

void input(Student &e){   //输入学生信息 
	cout<<"请输入学生姓名:"<<endl;
	cin>>e.name ;
	cout<<"请输入学生学号:"<<endl;
	cin>>e.no ;
	cout<<"请输入学生成绩:"<<endl;
	cin>>e.score ; 
}

void output(Student &e){  //输出学生信息 
	cout<<"姓名: " <<e.name<<"  学号: "<<e.no<<"  成绩: "<<e.score<<endl;
}
 
Status InitList(SqList &L){      //初始化顺序表 
 	L.elem = new Student[MAXSIZE]; //为表分配大小为MAXSIZE的空间 
 	if(!L.elem) exit(OVERFLOW); //分配失败 
	L.length=0;
	return 1;
}

Status GetStud(SqList &L,int i,Student &e){  //顺序表取值 
	if(i<1||i>L.length)
	 return ERROR;
	e = L.elem[i-1];
	return 1;
	}
	
Status ListInsert(SqList &L,int i,Student e){ //插入学生信息 
   if(i<1||(i>L.length+1) )	 //判断i值是否合法
   	return ERROR;     
   if(L.length==MAXSIZE) //判断当前储存空间是否已满
   	return ERROR;   
	
   for(int j=L.length-1;j>=i-1;j--)
   	L.elem[j+1]=L.elem[j];
   	L.elem[i-1]=e;
   	L.length++;
 	return 1;
} 
 
Status ListDelete(SqList &L,int i){    //删除学生信息
	if((i<=0)||(i>L.length))
	   return ERROR;
	else 
	   for(int j=i;j<=L.length-1;j++)
	        L.elem[j-1]=L.elem[j];
         	L.length--;
	return 1;
}

Status  LocatedStud(SqList &L, Student &e){  //查找学生信息 
		int i;
		for(i=0;i<L.length;i++){
		if(!strcmp(e.name, L.elem[i].name)) 
			return i+1;
		
		}
		return 0;
}	

int main(){
	int n,x,y,num,len,chose;
	char p;
	Student e;
	Student k;
	SqList L;
	cout<<"*********学生管理界面*********"<<endl;
	cout<<"        1.创建链表"<<endl;
	cout<<"        2.输入学生信息"<<endl;
	cout<<"        3.显示所有学生信息"<<endl;
	cout<<"        4.查找指定学生信息"<<endl;
	cout<<"        5.插入学生信息"<<endl;
	cout<<"        6.删除指定学生信息"<<endl;
	cout<<"        7.统计所有学生人数"<<endl;
	cout<<"        8.退出界面"<<endl<<endl;
	cout<<"*********请选择功能*********"<<endl;
	while(1){
	cin>>n;
	while(n<1||n>8)
	{
		cout<<"不存在该选择,请重新输入!"<<endl; 
		break;
	}

	switch(n){
		case 1:   //创建链表 
			if(InitList(L)) 
				cout<<"链表创建成功!"<<endl;
			else 
				cout<<"链表创建失败!"<<endl;
			break;
			
		case 2:   //输入学生信息
			cout<<"请输入学生信息:"<<endl;
			cout<<"请输入学生人数:"<<endl;
			cin>>num;
			for(int i=0;i<num;i++){
				L.length++;
				input(L.elem[i]);
			} 
			break;
		case 3:    //显示所有学生信息 
			 for(int i=0;i<L.length;i++){
			 	output(L.elem[i]);
			 }
			 break;
		case 4:    //查找指定学生信息
			cout<<"请输入所要查找同学的姓名:"<<endl;
			cin>>e.name ;
			chose=LocatedStud(L,e);
			if(chose!=0)
				output(L.elem[chose-1]);    
		   else  
               printf("未查询到此学生信息\n");           
			break;
		case 5:     //插入学生信息
			cout<<"请输入要插入的位置:"<<endl;
			cin>>x;
			cout<<"请输入插入学生的信息: "<<endl;
			cout<<"姓名:"<<endl;
			cin>>k.name ;
			cout<<"学号:"<<endl;
			cin>>k.no ;
			cout<<"成绩:"<<endl;
			cin>>k.score ; 
            cout<<L.length<<endl;
            if(ListInsert(L,x,k))    
                cout<<"学生信息插入成功"<<endl;
            else  
                cout<<"学生信息插入失败"<<endl;
                	break;
		case 6:    //删除指定学生信息
				cout<<"请输入要删除信息的学生位置:"<<endl;
				cin>>y;
				cout<<"如果确定删除,请点Y!"<<endl;
				cin>>p; 
			 if(p=='Y'){
			    if(ListDelete(L,y)==1)
			    	cout<<"删除成功!"<<endl;
				else  
		 		cout<<"删除失败!"<<endl;
		      }
			 else if(p!='Y')
			 	cout<<"删除失败!"<<endl;
			else
			    	break;
		case 7:   //统计所有学生人数
			cout<<"学生总人数为:"<<L.length<<endl;
			break;
		case 8:  //退出系统界面
		     exit(0);
	} 
}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/sang_12345/article/details/78522705
今日推荐