数据结构:顺序表和单链表学生管理系统

顺序表

list.c

#include"list.h"
Plist apply_area()
{
	Plist p=malloc(sizeof(List));
	if(p==NULL)
	{
		printf("空间申请失败\n");
		return NULL;
	}
	p->len=0;
	memset(p->data,0,sizeof(p->data));
	return p;
}

int int_put(Plist L,int n)
{
	for(int i=0;i<n;i++)
	{
		printf("请输入第%d个学生信息\n",i+1);
		printf("请输入学生姓名\n");
		scanf("%s",L->data[i].name);
		printf("请输入学生年龄\n");
		scanf("%d",&L->data[i].age);
		printf("请输入学生成绩\n");
		scanf("%d",&L->data[i].score);
		printf("请输入学生电话\n");
		scanf("%d",&L->data[i].photo);
		L->len++;
	}
}

int out_put(Plist L)
{
	for(int i=0;i<L->len;i++)
	{
		printf("%s: 年龄:%d  成绩:%d  电话:%d\n",L->data[i].name,L->data[i].age,L->data[i].score,L->data[i].photo);
	}
	return 0;
}

void intset(Plist L)
{
	printf("请输入要插入的位置\n");
	int n=0;
	scanf("%d",&n);
	if(n<1||n>L->len||L->len==MAX||L==NULL)
	{
		printf("插入失败\n");
	}
	else
	{
	for(int i=L->len-1;i>=n-1;i--)
	{
		L->data[i+1]=L->data[i];
	}
	printf("请输入学生姓名\n");
	scanf("%s",L->data[n-1].name);
	printf("请输入学生年龄\n");
	scanf("%d",&L->data[n-1].age);
	printf("请输入学生成绩\n");
	scanf("%d",&L->data[n-1].score);
	printf("请输入学生电话\n");
	scanf("%d",&L->data[n-1].photo);
	L->len++;
	}

}

void dele_L(Plist L)
{
	printf("请输入要删除的位置\n");
	int n=0;
	scanf("%d",&n);
	for(int i=n-1;i<L->len;i++)
	{
		L->data[i]=L->data[i+1];
	}
	L->len--;
}

void change_L(Plist L)
{
	printf("请输入要修改的学生位置\n");
	int n=0;
	scanf("%d",&n);
	printf("请输入学生姓名\n");
	scanf("%s",L->data[n-1].name);
	printf("请输入学生年龄\n");
	scanf("%d",&L->data[n-1].age);
	printf("请输入学生成绩\n");
	scanf("%d",&L->data[n-1].score);
	printf("请输入学生电话\n");
	scanf("%d",&L->data[n-1].photo);
}

void find_name(Plist L)
{
	printf("请输入要查找的学生姓名\n");
	char s[20]="";
	int x=0;
	scanf("%s",s);
	for(int i=0;i<L->len;i++)
	{
		if(strcmp(L->data[i].name,s)==0)
		{
			printf("%s: 年龄:%d  成绩:%d  电话:%d\n",L->data[i].name,L->data[i].age,L->data[i].score,L->data[i].photo);
			x++;
		}
	}
	if(x==0)
	{
		printf("查找失败\n");
	}
}


void paixu(Plist L)
{
	for(int i=0;i<L->len;i++)
	{
		int max=0;
		int maxi=0;
		for(int j=0;j<L->len-i;j++)
		{
			if(L->data[j].age>max)
			{
				max=L->data[j].age;
				maxi=j;
			}
		}
		students temp=L->data[L->len-i-1];
		L->data[L->len-i-1]=L->data[maxi];
		L->data[maxi]=temp;
	}
}
			

list.h

#ifndef _LIST_H_
#define _LIST_H_
#include<myhead.h>
#define MAX 30
typedef struct
{
	char name[20];
	int age;
	int score;
	int photo;
}students;
typedef struct
{
	students data[MAX];
	int len;
}List,*Plist;

Plist apply_area();
int int_put(Plist L,int n);
int out_put(Plist L);
void intset(Plist L);
void dele_L(Plist L);
void change_L(Plist L);
void find_name(Plist L);
void paixu(Plist L);
#endif

mymain

#include"list.h"
int main()
{
	Plist L=apply_area();
	while(1)
	{
		printf("1,输入学生信息\n");
		printf("2,输出\n");
		printf("3,插入\n");
		printf("4,删除\n");
		printf("5,修改\n");
		printf("6,查找\n");
		printf("7,排序\n");
		printf("0,退出\n");
		printf("请输入你要执行的操作\n");
		int n=0;
		scanf("%d",&n);
		switch(n)
		{
		case 1:
			{
				int x=0;
				printf("请输入你要输入的学生个数\n");
				scanf("%d",&x);
				int_put(L,x);
			}
			   break;
		case 2:out_put(L);
			   break;
		case 3:intset(L);
			   break;
		case 4:dele_L(L);
			   break;
		case 5:change_L(L);
			   break;
		case 6:find_name(L);
			   break;
		case 7:paixu(L);
			   break;
		case 0:return 0;
			   break;
		default:printf("指令错误\n");
		}
	}
	return 0;
			 
}

单链表

list.c

#include"list.h"
Plist apply_area()
{
	Plist p=malloc(sizeof(List));
	if(p==NULL)
	{
		printf("空间申请失败\n");
		return NULL;
	}
	p->len=0;
    p->next=NULL;
	return p;
}

int int_put(Plist L,int n)
{
	for(int i=0;i<n;i++)
	{
        Plist p=malloc(sizeof(List));
		printf("请输入第%d个学生信息\n",i+1);
		printf("请输入学生姓名\n");
		scanf("%s",p->data.name);
		printf("请输入学生年龄\n");
		scanf("%d",&p->data.age);
		printf("请输入学生成绩\n");
		scanf("%d",&p->data.score);
		printf("请输入学生电话\n");
		scanf("%d",&p->data.photo);
        p->next=L->next;
        L->next=p;
		L->len++;
	}
}

int out_put(Plist L)
{
    Plist p=L;
	for(int i=0;i<L->len;i++)
	{
        p=p->next;
    	printf("%s: 年龄:%d  成绩:%d  电话:%d\n",p->data.name,p->data.age,p->data.score,p->data.photo);
      
	}
	return 0;
}

void dele_L(Plist L)
{
	printf("请输入要删除的位置\n");
	int n=0;
	scanf("%d",&n);
    Plist p=L;
	for(int i=0;i<n-1;i++)
	{
		p=p->next;
	}
    Plist x=p->next;
    p->next=p->next->next;
	L->len--;
    free(x);
    x=NULL;
}


void change_L(Plist L)
{
	printf("请输入要修改的学生位置\n");
	int n=0;
	scanf("%d",&n);
    Plist p=L;
    for (int i = 0; i < n; i++)
    {
        p=p->next;
    }
    
	printf("请输入学生姓名\n");
	scanf("%s",p->data.name);
	printf("请输入学生年龄\n");
	scanf("%d",&p->data.age);
	printf("请输入学生成绩\n");
	scanf("%d",&p->data.score);
	printf("请输入学生电话\n");
	scanf("%d",&p->data.photo);
}

void find_name(Plist L)
{
	printf("请输入要查找的学生姓名\n");
	char s[20]="";
	int x=0;
	scanf("%s",s);
    Plist p=L;
	for(int i=0;i<L->len;i++)
	{
        p=p->next;
		if(strcmp(p->data.name,s)==0)
		{
			printf("%s: 年龄:%d  成绩:%d  电话:%d\n",p->data.name,p->data.age,p->data.score,p->data.photo);
			x++;
		}
	}
	if(x==0)
	{
		printf("查找失败\n");
	}
}

list.h

#ifndef _LIST_H_
#define _LIST_H_
#include<myhead.h>
typedef struct
{
	char name[20];
	int age;
	int score;
	int photo;
}students;
typedef struct node
{
    union 
    {
        students data;
        int len;
    };
    struct node *next;
}List,*Plist;
Plist apply_area();
int int_put(Plist L,int n);
int out_put(Plist L);
void dele_L(Plist L);
void change_L(Plist L);
void find_name(Plist L);
#endif

mymain.c

#include"list.h"
int main()
{
	Plist L=apply_area();
	while(1)
	{
		printf("1,输入学生信息\n");
		printf("2,输出\n");
		printf("3,删除\n");
		printf("4,修改\n");
		printf("5,查找\n");
		printf("0,退出\n");
		printf("请输入你要执行的操作\n");
		int n=0;
		scanf("%d",&n);
		switch(n)
		{
		case 1:
			{
				int x=0;
				printf("请输入你要输入的学生个数\n");
				scanf("%d",&x);
				int_put(L,x);
			}
			   break;
		case 2:out_put(L);
			   break;
		case 3:dele_L(L);
			   break;
		case 4:change_L(L);
			   break;
		case 5:find_name(L);
			   break;
		case 0:return 0;
			   break;
		default:printf("指令错误\n");
		}
	}
	return 0;
			 
}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值