7.7数据结构(顺序表)

1.头文件

#ifndef __WORK__
#define __WORK__

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

#define MAX 10

typedef struct Stu
{
	char name[12];
	int num;
}st,*Stu_p;

typedef struct stu 
{
	Stu_p arr[MAX];
	int len;
}stu,*stu_p;

//创建顺序表
void* creat();
//判满
int fill(stu_p P);
//判空
int empty(stu_p P);
//增加学生元素
int add_stu(stu_p P,char name1[],int num1);
//按位置插入
int add_index(stu_p P,int index,char name1[],int num1);
//按位置删除
int dele_index(stu_p P,int index);
//修改
int change(stu_p P,int index,char name1[],int num1);
//按学号查找
int find(stu_p P,int num1);
//去重
int rm(stu_p P);
//输出
void show(stu_p P);
//释放顺序表
void release(stu_p *p);

#endif

2.功能函数

#include "work.h"

//创建顺序表
void* creat()
{
	stu_p P=(stu_p)malloc(sizeof(stu));
	if(P==NULL)
	{
		printf("堆区空间申请失败\n");
		return NULL;
	}
	P->len=0;
	for(int i=0;i<MAX;i++)
	{
		P->arr[i]=(Stu_p)malloc(sizeof(st));
	    memset(P->arr[i]->name,0,sizeof(P->arr[i]->name));
		P->arr[i]->num=0;
	}

	printf("顺序表创建成功\n");
	return P;
}

//判满
int fill(stu_p P)
{
	if(P==NULL)
	{
		printf("参数传入失败\n");
		return 1;
	}
	if(P->len==MAX)
	{
		printf("顺序表已满\n");
		return 1;
	}
	else
	{
		return 0;
	}
}

//判空
int empty(stu_p P)
{
	if(P==NULL)
	{
		printf("参数传入失败\n");
		return -1;
	}
	if(P->len==0)
	{
		printf("顺序表为空\n");
		return 1;
	}
	else
	{
		return 0;
	}
}

//增加学生元素
int add_stu(stu_p P,char name1[],int num1)
{
	if(P==NULL)
	{
		printf("参数传入失败\n");
		return -1;
	}
	if(fill(P))
	{
		return 0;
	}
	strcpy(P->arr[P->len]->name,name1);
	P->arr[P->len]->num=num1;
	P->len++;
	return 1;
}

//按位置插入
int add_index(stu_p P,int index,char name1[],int num1)
{
	if(P==NULL)
	{
		printf("参数传入失败\n");
		return -1;
	}
	if(fill(P))
	{
		return 0;
	}
	if(index<1||index>P->len+1)
	{
		printf("传入位置不合法\n");
		return 0;
	}
	index--;
	Stu_p temp=P->arr[P->len];
	for(int i=P->len;i>index;i--)
	{
		P->arr[i]=P->arr[i-1];
	}
	P->arr[index]=temp;
	strcpy(P->arr[index]->name,name1);
	P->arr[index]->num=num1;
	P->len++;
	return 1;
}

//按位置删除
int dele_index(stu_p P,int index)
{
	if(P==NULL)
	{
		printf("参数传入失败\n");
		return -1;
	}
	if(empty(P))
	{
		return 0;
	}
	if(index<1||index>P->len)
	{
		printf("传入位置不合法\n");
		return 0;
	}
	index--;
	Stu_p tem=P->arr[index];
	for(int i=index;i<P->len;i++)
	{
		P->arr[i]=P->arr[i+1];
	}
	P->arr[P->len]=tem;
	P->len--;
	return 1;
}

//修改
int change(stu_p P,int index,char name1[],int num1)
{
	if(P==NULL)
	{
		printf("参数传入失败\n");
		return -1;
	}
	if(index<1||index>P->len)
	{
		printf("传入位置不合法\n");
		return 0;
	}
	index--;
	P->arr[index]->num=num1;
	strcpy(P->arr[index]->name,name1);
	return 1;
}

//按学号查找
int find(stu_p P,int num1)
{
	if(P==NULL)
	{
		printf("参数传入失败\n");
		return -1;
	}
	int flag=1;
	for(int i=0;i<P->len;i++)
	{
		if(P->arr[i]->num==num1)
		{
			printf("已找到学号为%d学生:%s\n",num1,P->arr[i]->name);
			flag=0;
			return 1;
		}
	}
	if(flag)
	{
		printf("未找到\n");
		return 0;
	}
}

//去重
int rm(stu_p P)
{
	if(P==NULL)
	{
		printf("参数传入失败\n");
		return -1;
	}
	for(int i=0;i<P->len;i++)
	{
		for(int j=i+1;j<P->len;j++)
		{
			if(P->arr[i]->num==P->arr[j]->num)
			{
				dele_index(P,j+1);
				j--;
			}
		}
	}
	return 1;
}

//输出
void show(stu_p P)
{
	if(P==NULL)
	{
		printf("参数传入失败\n");
		return ;
	}
	for(int i=0;i<P->len;i++)
	{
		printf("姓名:%s 学号:%d\n",P->arr[i]->name,P->arr[i]->num);
	}
	putchar(10);
}

//释放顺序表
void release(stu_p *p)
{
	if(*p==NULL)
	{
		printf("参数传入失败\n");
		return;
	}
	for(int i=0;i<MAX;i++)
	{
		free((*p)->arr[i]);
	}
	free(*p);
	*p=NULL;
}

3.主函数

#include "work.h"

int main()
{
	stu_p H=creat();
	add_stu(H,"qq",12);
	add_stu(H,"ww",13);
	add_stu(H,"ww",13);
	add_stu(H,"ww",13);
	add_stu(H,"ee",14);
	add_stu(H,"ee",24);
	add_stu(H,"ee",14);
	add_stu(H,"rr",15);
	show(H);
	rm(H);
	show(H);
	add_index(H,3,"bb",21);
	show(H);
	dele_index(H,1);
	show(H);
	change(H,4,"ss",31);
	show(H);
	find(H,14);
	release(&H);

	return 1;



}

实现效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值