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

搜索热词

#include

#include

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

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

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

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 %.2f\n",stu.name,stu.sno,stu.age,stu.score);

TraveList(L);

}else{

printf("删除失败!\n");

}

//TraveList(L);

break;

}

}

}

}

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值