《数据结构》进行曲 之 单链表实现学生信息管理系统
发布时间: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;
}
}
}
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
