加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

《数据结构》进行曲 之 单链表实现学生信息管理系统

发布时间:2020-12-15 05:59:21 所属栏目:安全 来源:网络整理
导读:#includestdio.h#includeiostreamusing namespace std;#define MAX 100typedef struct STU{char name[20];char sno[20];int age;float score;}Student;typedef struct LNode{Student data;struct LNode *next;}LNode,*LinkList;//初始化(带头结点的单链表)in
#include<stdio.h>
#include<iostream>
using namespace std;

#define MAX 100

typedef struct STU{
	char name[20];
	char sno[20];
	int age;
	float score;
}Student;

typedef struct LNode{
	Student data;
	struct LNode *next;
}LNode,*LinkList;

//初始化(带头结点的单链表)
int InitList(LinkList &L){
	L=new LNode;
	L->next=NULL;
	return 1;
} 

//判断链表是否为空
int ListEmpty(LinkList L){
	if(L->next=NULL){
		return 1;//链表为空 
	}else{
		return 0;//链表非空 
	}
} 

//获取链表长度
int ListLength(LinkList L){
	int length=0;
	struct LNode *p;
	p=L->next;
	while(p){
		p=p->next;
		length++;
	}
	return length;
}

//遍历链表
void TraveList(LinkList L){
	struct LNode *p;
	p=L->next;
	printf("链表结构如下:n");
	while(p){
		printf("%s %s %d %.2f",p->data.name,p->data.sno,p->data.age,p->data.score);
		printf("n");
		p=p->next;
	}
} 

//插入操作 
int ListInsert(LinkList &L,int location,Student &e){
	//在链表L的location位置插入元素e
	struct LNode *p;
	int j=0;
	p=L;
	while(p&&j<location-1){
		p=p->next;
		++j;
	} 
	if(!p||j>location-1){
		return 0;
	}
	struct LNode *s;
	s=new LNode;
	s->data=e;
	s->next=p->next;
	p->next=s;
	return 1;
}

//删除操作
int ListDelete(LinkList &L,Student &e){
	//删除L中location位置的元素,并用e返回其值
	struct LNode *p;
	int j=0;
	p=L;
	while(p->next&&j<location-1){
		p=p->next;
		++j;
	} 
	if(!(p->next)||j>location-1){
		return 0;
	}
	struct LNode *q;
	q=new LNode;
	q=p->next;
	p->next=q->next;
	e=q->data;
	delete q;
	return 1;
} 

//头插法法创建单链表
void CreateList1(LinkList &L,int n){
	//创建长度为n的单链表
	L=new LNode;
	L->next=NULL;
	printf("请输入链表元素;n");
	for(int i=n;i>0;--i){
		printf("请输入第%d个元素值:n",i);
		struct LNode *p;
		p=new LNode;//生成新结点
		//输入
		printf("请输入姓名:");
		scanf("%s",p->data.name); 
		printf("请输入学号:");
		scanf("%s",p->data.sno);
		printf("请输入年龄:");
		scanf("%d",&p->data.age);
		printf("请输入成绩:");
		scanf("%f",&p->data.score);
		p->next=L->next;
		L->next=p;
	} 
} 

//尾插法创建单链表
void CreateList2(LinkList &L,int n){
	L=new LNode;
	L->next=NULL;
	struct LNode *r;
	r=L;
	printf("请输入链表元素值:n");
	for(int i=0;i<n;i++){
		struct LNode *p;
		p=new LNode;
		printf("请输入第%d个元素的值:n",i+1);
		printf("请输入姓名:");
		scanf("%s",p->data.name);
		printf("请输入学号:");
		scanf("%s",&p->data.score);
		p->next=NULL;
		r->next=p;
		r=p;
	}
} 
int main(){
	
	LinkList L;

	printf("1.初始化链表n");
	printf("2.创建链表n");
	printf("3.插入操作n");
	printf("4.删除操作n");
	printf("0.退出n");
	
	int choose=-1;
	while(choose!=0){
		printf("请选择操作:n");
		scanf("%d",&choose);
		switch(choose){
			case 1:{
				if(InitList(L)){
					printf("链表初始化成功!n");
				}else{
					printf("链表初始化失败!n");
				}
				break;
			}
			case 2:{
				printf("1.头插法创建单链表n");
				printf("2.尾插法创建单链表n");
				printf("请选择操作:n");
				int choose1;
				scanf("%d",&choose1);
				switch(choose1){
					case 1:{
						printf("请输入链表长度:n");
						int n;
						scanf("%d",&n);
						CreateList1(L,n);
						TraveList(L);
						break;
					}
					case 2:{
						printf("请输入链表长度:n");
						int n;
						scanf("%d",&n);
						CreateList2(L,n);
						TraveList(L);
						break;
					}
				}
				break;
			}
			case 3:{
				printf("请输入插入的位置和值:n");
				int location;
				scanf("%d",&location);
				
				Student stu;
				printf("请输入姓名:");
				//char name[20];
				scanf("%s",stu.name);
				
				printf("请输入学号:");
				scanf("%s",stu.sno);
				
				printf("请输入年龄:");
				scanf("%d",&stu.age);
				
				printf("请输入成绩:");
				scanf("%f",&stu.score);
				
				if(ListInsert(L,location,stu)){
					printf("插入成功!n");
					TraveList(L);
				}else{
					printf("插入失败!n");
				}
				//TraveList(L);
				break;
			}
			case 4:{
				printf("请输入要删除的元素的位置:n");
				int location;
				scanf("%d",&location);
				
				Student stu;
				
				if(ListDelete(L,stu)){
					printf("删除成功!n");
					printf("删除的元素值是:n");
					printf("%s %s %d %.2fn",stu.name,stu.sno,stu.age,stu.score);
					TraveList(L);
				}else{
					printf("删除失败!n");
				}
				//TraveList(L);
				break;
			}
		}
	}
}
 
 





(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读