2022/7/19数据结构作业

分文件编译 ,将功能函数封装到一个文件中

功能函数

#include"seqlist.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
seqList* listCreate()
{
	seqList *S = (seqList*)malloc(sizeof(seqList));
	if(NULL == S)
	{
		printf("申请空间失败\n");
		return NULL;
	}
	memset(S->data,0,sizeof(S->data));
	S->len = 0;
	printf("创建成功\n");
	return S;
}
//判空
int listEmpty(seqList *S)
{
	if(NULL==S)
	{
		printf("所给顺序标不合法\n");
		exit(0);
	}
	return S->len==0? 1:0;
}
//判满
int listFull(seqList *S)
{
	return S->len==MAX ? 1:0;
}
//添加元素
int listAdd(seqList *S,datatype e)
{
	if(listFull(S))
	{
		printf("表满,添加失败\n");
		return -1;
	}
	S->data[S->len]=e;
	S->len ++;
	printf("添加成功\n");
	return 0;
}
//遍历
void listShow(seqList *S)
{
	if(listEmpty(S))
	{
		printf("空空如也,遍历失败\n");
		return;
	}
	printf("目前顺序表中元素分别是:");
	for(int i=0; i<S->len; i++)
	{
		printf("%d\t",S->data[i]);
	}
	printf("\n");
}
//任意位置插入
int listInsertPos(seqList *S,int pos,datatype e)
{
	if(listFull(S))
	{
		printf("表满,插入失败\n");
		return -1;
	}
	if(pos<0 || pos>S->len)
	{
		printf("插入位置不合法,插入失败\n");
		return -2;
	}
	for(int i=S->len-1;i>=pos;i--)
	{
		S->data[i+1]=S->data[i];
	}
	S->data[pos]=e;
	S->len++;
	printf("插入成功\n");
	listShow(S);
}
//任意位置删除
int listDeletePos(seqList *S,int pos)
{
	if(listEmpty(S) || pos<0 || pos>S->len-1)
	{
		printf("删除失败\n");
		return -1;
	}
	for(int i=pos+1; i<S->len; i++)
	{
		S->data[i-1]=S->data[i];
	}
	S->len--;
	printf("删除成功\n");
	return 0;
}
//按值查找,返回对应的位置
int listSearchValue(seqList *S,datatype e,int *p)
{
	*p=0;
	if(listEmpty(S))
	{
		printf("表空,查找失败\n");
		(*p)++;
		return -1;
	}
	for(int i=0; i<S->len; i++)
	{
		if(e==S->data[i])
		{
			return i;
		}
	}
	printf("查找失败,表中未有该元素\n");
	(*p)++;
	return -2;
}
//按位置查找,返回对应的值
datatype listSearchPos(seqList *S,int pos,int *p)
{
	*p=0;
	if(listEmpty(S))
	{
		printf("表空,查找失败\n");
		(*p)++;
		return -1;
	}
	else if(pos<0 || pos>S->len)
	{
		printf("查找失败,表中未有该下标\n");
		(*p)++;
		return -2;
	}
	else
	{
		return S->data[pos];
	}
}
//按值修改
int listUpdateValue(seqList *S,datatype old_e, datatype new_e)
{
	int flag=0;
	if(listEmpty(S))
	{
		printf("表空,查找失败\n");
		return -1;
	}
	for(int i=0; i<S->len; i++)
	{
		if(S->data[i]==old_e)
		{
			S->data[i]=new_e;
			flag++;
		}
	}
	if(flag==0)
	{
		printf("修改失败,表中未有该元素\n");
		return -2;
	}else
	{
		printf("按值修改成功\n");
		listShow(S);
		return 0;
	}
}
//按位置修改
int listUpdatePos(seqList *S,int pos, datatype new_e)
{
	//判断逻辑
	if(listEmpty(S) || pos<0 || pos>S->len-1)
	{
		printf("修改失败\n");
		return -1;
	}
	//修改逻辑
	S->data[pos]= new_e;
	printf("修改成功\n");
	listShow(S);
	return 0;	
}
//冒泡升序排序
void listSortUp(seqList *S)
{
	int i,j;
	datatype temp;
	for(i=1;i<S->len;i++)
	{
		for(j=0;j<S->len-i;j++)
		{
			if(S->data[j]>S->data[j+1])
			{
				temp=S->data[j];
				S->data[j]=S->data[j+1];
				S->data[j+1]=temp;
			}
		}
	}
	printf("升序排序成功\n");
	listShow(S);
}
//选择降序排序
void listSortDown(seqList *S)
{
	int i,j;
	int max;
	datatype temp;
	for(i=0; i<S->len; i++)
	{
		max=i;
		for(j=i+1; j<S->len; j++)
		{
			if(S->data[max]<S->data[j])
			{
				max=j;
			}
		}
		if(max!=i)
		{
			temp=S->data[max];
			S->data[max]=S->data[i];
			S->data[i]=temp;
		}
	}
	printf("降序排序成功\n");
	listShow(S);
}
//去重
void listDeleteRepeat(seqList *S)
{
	if(S->len<=1)
	{
		printf("去重失败\n");
		return;
	}
	int i,j;
	for(i=0; i<S->len; i++)
	{
		for(j=i+1;j<S->len; j++)
		{
			if(S->data[i]==S->data[j])
			{
				listDeletePos(S,j);
				j--;
			}
		}
	}
	printf("去重成功\n");
	listShow(S);
}
//释放表
void listFree(seqList *S)
{
	if(NULL!=S)
	{
		free(S);
	}
	S=NULL;
	printf("释放成功\n");
}

将功能函数头和结构体定义集成至.h文件中

#ifndef __SEQLIST_H__
#define __SEQLIST_H__

#define MAX 20
typedef int datatype;

typedef struct
{
	datatype data[MAX];
	int len;
}seqList;
//申请空间
seqList* listCreate();
//判空
int listEmpty(seqList *S);
//判满
int listFull(seqList *S);
//添加元素
int listAdd(seqList *S,datatype e);
//遍历
void listShow(seqList *S);
//任意位置插入
int listInsertPos(seqList *S,int pos,datatype e);
//任意位置删除
int listDeletePos(seqList *S,int pos);
//按值查找,返回对应的位置
int listSearchValue(seqList *S,datatype e,int *p);
//按位置查找,返回对应的值
datatype listSearchPos(seqList *S,int pos,int *p);
//按值修改
int listUpdateValue(seqList *S,datatype old_e, datatype new_e);
//按位置修改
int listUpdatePos(seqList *S,int pos, datatype new_e);
//冒泡升序排序
void listSortUp(seqList *S);
//选择降序排序
void listSortDown(seqList *S);
//去重
void listDeleteRepeat(seqList *S);
//释放表
void listFree(seqList *S);
#endif

 在主文件中引用该.h文件并使用菜单框架实现功能函数的使用

#include<stdio.h>
#include<stdlib.h>
#include"./seqlist.h"
int p=0;
int main(int argc, const char *argv[])
{
	int num;
	seqList *S= listCreate();
	if(NULL==S)
	{
		return -1;
	}
	while(1)
	{
		printf("--------------------------------------------\n");
		printf("----------------数据结构练习----------------\n");
		printf("1、写入元素\n");
		printf("2、任意位置插入\n");
		printf("3、任意位置删除\n");
		printf("4、按值查找\n");
		printf("5、按位置查找\n");
		printf("6、按值修改\n");
		printf("7、按位置修改\n");
		printf("8、冒泡升序排序\n");
		printf("9、选择降序排序\n");
		printf("10、去重\n");
		printf("0、释放表并退出程序\n");
		printf("请输入想要实现的功能编号:");
		scanf("%d",&num);
		switch(num)
		{
		case 1:
			{
				int n,temp;
				printf("请输入输入元素的个数>>");
				scanf("%d",&n);
				for(int i=0; i<n; i++)
				{
					printf("请输入元素>>");
					scanf("%d",&temp);
					listAdd(S,temp);
				}
			} break;
		case 2: 
			{
				int pos;
				datatype e;
				printf("请输入想要插入的位置>>");
				scanf("%d",&pos);
				printf("请输入想要插入的值>>");
				scanf("%d",&e);
				listInsertPos(S,pos,e);
			} break;
		case 3:
			{
				int pos;
				printf("请输入想要删除的位置>>");
				scanf("%d",&pos);
				listDeletePos(S,pos);
			} break;
		case 4:
			{
				int find,pos;
				printf("请输入想要查找的值>>");
				scanf("%d",&find);
				pos=listSearchValue(S,find,&p);
				if(p==0)
				{
					printf("查找成功,下标为%d\n",pos);
				}
			} break;
		case 5:
			{
				int pos;
				datatype find;
				printf("请输入想要查找的下标>>");
				scanf("%d",&pos);
				find=listSearchPos(S,pos,&p);
				if(p==0)
				{
					printf("查找成功,对应的值为%d\n",find);
				}
			} break;
		case 6:
			{
				datatype var,a;
				printf("请输入想要修改的原值>>");
				scanf("%d",&var);
				printf("请输入想要修改后的值>>");
				scanf("%d",&a);
				listUpdateValue(S,var,a);
			}break;
		case 7:
			{
				int pos;
				datatype e;
				printf("请输入想要修改的位置>>");
				scanf("%d",&pos);
                printf("请输入想要修改后的值>>");
				scanf("%d",&e);
				listUpdatePos(S,pos,e);
			}break;
		case 8:
			{
				listSortUp(S);
			}break;
		case 9:
			{
				listSortDown(S);
			}break;
		case 10:
			{
				listDeleteRepeat(S);
			}break;
		case 0:
			{
				listFree(S);
				S=NULL;
				exit(0);
			} break;
		default : printf("输入的编号有误,请重新输入!\n"); break;
		}
	}
	return 0;
} 

部分运行结果

--------------------------------------------
----------------数据结构练习----------------
1、写入元素
2、任意位置插入
3、任意位置删除
4、按值查找
5、按位置查找
6、按值修改
7、按位置修改
8、冒泡升序排序
9、选择降序排序
10、去重
0、释放表并退出程序
请输入想要实现的功能编号:1
请输入输入元素的个数>>5
请输入元素>>1
添加成功
请输入元素>>2
添加成功
请输入元素>>3
添加成功
请输入元素>>1
添加成功
请输入元素>>5
添加成功
--------------------------------------------
----------------数据结构练习----------------
1、写入元素
2、任意位置插入
3、任意位置删除
4、按值查找
5、按位置查找
6、按值修改
7、按位置修改
8、冒泡升序排序
9、选择降序排序
10、去重
0、释放表并退出程序
请输入想要实现的功能编号:2
请输入想要插入的位置>>3
请输入想要插入的值>>2
插入成功
目前顺序表中元素分别是:1	2	3	2	1	5	
--------------------------------------------
----------------数据结构练习----------------
1、写入元素
2、任意位置插入
3、任意位置删除
4、按值查找
5、按位置查找
6、按值修改
7、按位置修改
8、冒泡升序排序
9、选择降序排序
10、去重
0、释放表并退出程序
请输入想要实现的功能编号:3       
请输入想要删除的位置>>3
删除成功
--------------------------------------------
----------------数据结构练习----------------
1、写入元素
2、任意位置插入
3、任意位置删除
4、按值查找
5、按位置查找
6、按值修改
7、按位置修改
8、冒泡升序排序
9、选择降序排序
10、去重
0、释放表并退出程序
请输入想要实现的功能编号:4   
请输入想要查找的值>>3
查找成功,下标为2
--------------------------------------------
----------------数据结构练习----------------
1、写入元素
2、任意位置插入
3、任意位置删除
4、按值查找
5、按位置查找
6、按值修改
7、按位置修改
8、冒泡升序排序
9、选择降序排序
10、去重
0、释放表并退出程序
请输入想要实现的功能编号:5
请输入想要查找的下标>>3
查找成功,对应的值为1
--------------------------------------------
----------------数据结构练习----------------
1、写入元素
2、任意位置插入
3、任意位置删除
4、按值查找
5、按位置查找
6、按值修改
7、按位置修改
8、冒泡升序排序
9、选择降序排序
10、去重
0、释放表并退出程序
请输入想要实现的功能编号:6
请输入想要修改的原值>>3
请输入想要修改后的值>>5
按值修改成功
目前顺序表中元素分别是:1	2	5	1	5	
--------------------------------------------
----------------数据结构练习----------------
1、写入元素
2、任意位置插入
3、任意位置删除
4、按值查找
5、按位置查找
6、按值修改
7、按位置修改
8、冒泡升序排序
9、选择降序排序
10、去重
0、释放表并退出程序
请输入想要实现的功能编号:7
请输入想要修改的位置>>3
请输入想要修改后的值>>2
修改成功
目前顺序表中元素分别是:1	2	5	2	5	
--------------------------------------------
----------------数据结构练习----------------
1、写入元素
2、任意位置插入
3、任意位置删除
4、按值查找
5、按位置查找
6、按值修改
7、按位置修改
8、冒泡升序排序
9、选择降序排序
10、去重
0、释放表并退出程序
请输入想要实现的功能编号:8
升序排序成功
目前顺序表中元素分别是:1	2	2	5	5	
--------------------------------------------
----------------数据结构练习----------------
1、写入元素
2、任意位置插入
3、任意位置删除
4、按值查找
5、按位置查找
6、按值修改
7、按位置修改
8、冒泡升序排序
9、选择降序排序
10、去重
0、释放表并退出程序
请输入想要实现的功能编号:9
降序排序成功
目前顺序表中元素分别是:5	5	2	2	1	
--------------------------------------------
----------------数据结构练习----------------
1、写入元素
2、任意位置插入
3、任意位置删除
4、按值查找
5、按位置查找
6、按值修改
7、按位置修改
8、冒泡升序排序
9、选择降序排序
10、去重
0、释放表并退出程序
请输入想要实现的功能编号:10
删除成功
删除成功
去重成功
目前顺序表中元素分别是:5	2	1	
--------------------------------------------
----------------数据结构练习----------------
1、写入元素
2、任意位置插入
3、任意位置删除
4、按值查找
5、按位置查找
6、按值修改
7、按位置修改
8、冒泡升序排序
9、选择降序排序
10、去重
0、释放表并退出程序
请输入想要实现的功能编号:0
释放成功

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

命如星火

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值