顺序表按元素插入、删除、修改、查找,顺序表排序,释放

#ifndef  __HEAD_H__
#define  __HEAD_H__


#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAXSIZE 10
typedef int datatype;
//定义顺序表
typedef struct
{
	int data[MAXSIZE];
	int len;
}seqlist;

seqlist *create();
void menue();

int full_seqlist(seqlist *list);
int empty_seqlist(seqlist *list);
int insert_rear(datatype e,seqlist *list);
int output(seqlist *list);
int delete_rear(seqlist *list);
int find_sub(seqlist *list,int sub);
int change_sub(seqlist *list,int sub,int e);
int insert_sub(seqlist *list,int sub,int e);
int delete_sub(seqlist *list,int sub);
int search_sub(seqlist *list,int key);
int delete_key(seqlist *list,int key);
int change_key(seqlist *list,int key,int e);
int sort_seqlist(seqlist *list);

#endif
#include "head.h"

void menue()
{
	puts("************************************");
	puts("\t1,表尾部插入");
	puts("\t2,表尾删除");
	puts("\t3,顺序表遍历");
	puts("\t4,顺序表按下标查找");
	puts("\t5,顺序表修改"); 
	puts("\t6,顺序表按下标插入");
	puts("\t7,顺序表按下标删除");
	puts("\t8,顺序表按元素查找");
	puts("\t9,顺序表按元素删除");
	puts("\t10,顺序表按元素修改");
	puts("\t11,顺序表排序");
	puts("\t12,顺序表空间释放");
	puts("************************************");
}

seqlist *create()
{
	seqlist *list=(seqlist *)malloc(sizeof(seqlist));
	if(list==NULL)
	{
		return NULL;
	}
	list->len=0;//对顺序表清空
	return list;
}

/*
 * function:    判断顺序表满
 * @param [ in] 指针
 * @param [out] 
 * @return      满返回-1  非满返回0
 */
int full_seqlist(seqlist *list)
{
	return list->len==MAXSIZE?-1:0;
}

/*
 * function:    顺序表空
 * @param [ in] 指针
				{
					int sub;
					printf("输入需要插入的下标:");
					scanf("%d",&sub);
					int e;
					printf("输入插入的值:");
					scanf("%d",&e);
					insert_sub(list,sub,e);
				}
 * @param [out] 
 * @return      空返回-1   非空返回0
 */
int empty_seqlist(seqlist *list)
{
	return list->len==0?-1:0;
}

int insert_rear(datatype e,seqlist *list)
{
	//判断顺序表是否满
	if(list==NULL||list->len==MAXSIZE)//失败条件
	{
		printf("插入失败\n");
		return -1;
	}
	//可以插入
	list->data[list->len]=e;
	list->len++;
	return 0;
}

int output(seqlist *list)
{
	//1、判断顺序表是否为空
	//2、判断顺序表是否创建成功
	if(list==NULL||list->len==0)
	{
		puts("顺序表为空\n");
		return -1;
	}
	for(int i=0;i<list->len;i++)
	{
		printf("%d\t",list->data[i]);
	}
	printf("\n");
}

/*
 * function:    尾部删除
 * @param [ in] 
 * @param [out] 指针
 * @return      成功返回0  失败返回-1
 */
int delete_rear(seqlist *list)
{
	if(list==NULL||empty_seqlist(list))
	{
		printf("删除失败");
		return -1;
	}
	//3、删除
	list->len--;
	printf("删除成功\n");
	return 0;
}

/*
 * function:    按下标查找
 * @param [ in] 顺序表 查找的下标
 * @param [out] 
 * @return      成功返回0 失败返回-1
 */
int find_sub(seqlist *list,int sub)
{
	//1、判断顺序表创建是否成功
	//2、判断顺序表是否为空
	//3、判断下标是否合法
	if(list==NULL||empty_seqlist(list)||sub<0||sub>=list->len)
	{
		printf("查找失败\n");
		return -1;
	}
	printf("查找的元素是:%d\n",list->data[sub]);
	return 0;
				{
					int sub;
					printf("输入需要插入的下标:");
					scanf("%d",&sub);
					int e;
					printf("输入插入的值:");
					scanf("%d",&e);
					insert_sub(list,sub,e);
				}
}

/*
 * function:    按下标修改
 * @param [ in] 顺序表  下标  修改的值
 * @param [out] 
 * @return      成功返回0 失败返回-1
 */
int change_sub(seqlist *list,int sub,int e)
{
	if(list==NULL||empty_seqlist(list)||sub<0||sub>=list->len)
	{
		printf("修改失败\n");
		return -1;
	}
	list->data[sub]=e;
	printf("修改成功");
	return 0;
}

int insert_sub(seqlist *list,int sub,int e)
{
	if(list==NULL||list->len==MAXSIZE||sub<0||sub>list->len)
	{
		printf("插入失败");
		return -1;
	}
	for(int i=list->len-1;i>=sub;i--)
	{
		list->data[i+1]=list->data[i];
	}
	list->data[sub]=e;
	list->len++;
}

int delete_sub(seqlist *list,int sub)
{
	if(list==NULL||list->len==MAXSIZE||sub<0||sub>list->len)
	{
		printf("删除失败");
		return -1;
	}
	for(int i=sub+1;i<list->len;i++)
	{
		list->data[i-1]=list->data[i];
	}
	list->len--;
}

/*
 * function:    按元素查找
 * @param [ in] 
 * @param [out] 顺序表 查找的元素
 * @return      下标
 */
int search_sub(seqlist *list,int key)
{
	//判断顺序表创建是否成功
	//判断顺序表是否空
	if(list==NULL||empty_seqlist(list))
	{
		return -1;
	}
	//查找
	for(int i=0;i<list->len;i++)
	{
		if(list->data[i]==key)
		{
			return i;
		}
	}
	return -1;
}
//按元素删除
int delete_key(seqlist *list,int key)
{
	int sub=search_sub(list,key);
	if(sub==-1)
	{
		return -1;
	}
	delete_sub(list,sub);
	return 0;
}

//按元素修改
int change_key(seqlist *list,int key,int e)
{
	int sub=search_sub(list,key);
	if(sub==-1)
	{
		return -1;
	}
	if(list==NULL||empty_seqlist(list)||sub<0||sub>=list->len)
	{
		printf("修改失败\n");
		return -1;
	}
	list->data[sub]=e;
	printf("修改成功\n");
}

//顺序表排序
int sort_seqlist(seqlist *list)
{
	if(empty_seqlist(list))
	{
		printf("排序失败\n");
		return -1;
	}
	for(int i=1;i<list->len;i++)
	{
		int max=list->data[i];
		for(int j=0;j<list->len-i;j++)
		{
			if(list->data[j]>list->data[j+1])
			{
				int max=list->data[j];
				list->data[j]=list->data[j+1];
				list->data[j+1]=max;
			}
		}
	}
	printf("排序成功\n");
	return 0;
}

//释放空间
int *free_space(seqlist *list)
{
	if(list=NULL)
		return NULL;
	free(list);
	list=NULL;
	return list;	
}
#include "head.h"
int main(int argc, const char *argv[])
{
	seqlist *list=create();//在堆区创建空间,创建一个顺序表即可

	menue();
	int number;
	while(1)
	{
		printf("请输入你的选择");
		scanf("%d",&number);
		switch(number)
		{
			case 1:
				{
					int n;
					datatype e;
					printf("输入尾插入个数:");
					scanf("%d",&n);
					for(int i=0;i<n;i++)
					{
						printf("输入插入的元素:");
						scanf("%d",&e);
						insert_rear(e,list);
					}
				}
				break;
			case 2:
				{
					delete_rear(list);
				}
				break;
			case 3:
				{
					output(list);
				}
				break;
			case 4:
				{
					int sub;
					printf("输入需要查找的下标:");
					scanf("%d",&sub);
					find_sub(list,sub);
				}
				break;
			case 5:
				{
					int sub;
					printf("输入需要修改的位数:");
					scanf("%d",&sub);
					int e;
					printf("需要修改的值:");
					scanf("%d",&e);
					change_sub(list,sub,e);
				}
				break;
			case 6:
				{
					int sub;
					printf("输入需要插入的下标:");
					scanf("%d",&sub);
					int e;
					printf("输入插入的值:");
					scanf("%d",&e);
					insert_sub(list,sub,e);
				}
				break;
			case 7:
				{
					int sub;
					printf("输入需要删除的下标:");
					scanf("%d",&sub);
					delete_sub(list,sub);
				}
				break;
			case 8:
				{
					int key;
					printf("输入需要查找的元素:");
					scanf("%d",&key);
					int result=search_sub(list,key);
					if(result==-1)
					{
						printf("查找失败");
					}
					else
					{
						printf("查找元素的下标为:%d\n",result);
					}
				}
				break;
			case 9:
				{
					int key;
					printf("输入需要删除的元素:");
					scanf("%d",&key);
					delete_key(list,key);
				}
				break;
			case 10:
				{
					int key,e;
					printf("输入需要修改的元素:");
					scanf("%d",&key);
					printf("输入修改后的元素:");
					scanf("%d",&e);
					change_key(list,key,e);
				}
				break;
			case 11:
				{
					sort_seqlist(list);
				}
			default:printf("输入错误,重新输入\n");break;	   
			case 0:printf("退出程序\n");exit(0);
		}
	}
	return 0;
}

1、顺序表按元素删除

 2、顺序表按元素修改

 3、数据表按元素查找

 4、顺序表排序

5、释放空间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值