数据结构顺序表,实现增删改查

一、顺序表结构体定义

#define MAXSIZE 8            //定义常量MAXSIZE,表示数据元素的最大个数为8
typedef int datatype;        //重定义int类型,分别后期修改顺序表中存储的数据类型
typedef struct
{
	int len;  //顺序表长度
	datatype data[MAXSIZE];  //数据元素
}Seqlist;

二、顺序表创建空间

Seqlist *Request_space(void) //创建空间
{
	Seqlist *list=(Seqlist *)malloc(sizeof(Seqlist));
	if(NULL==list)
		return NULL;
	list->len=0;            //顺序表长度初始化为0
	memset(list->data,0,sizeof(datatype)*MAXSIZE);  //数据元素初始化为0
 	return list;
}

三、实现顺序表增删改查

1. 判断顺序表是否为空

int empty_list(Seqlist *list)  //判断顺序表长度是否为空
{	
	return list->len==0?-1:0;
}

2. 判断顺序表是否为满

int full_list(Seqlist *list)  //判断顺序表长度是否为满
{
	return list->len==MAXSIZE?-1:0;
}

3. 实现输出

void Output(Seqlist *list)  //实现输出
{
	if(NULL==list||empty_list(list))
		return ;
	for(int i=0;i<list->len;i++)
	printf("%d ",list->data[i]);
	puts("");
}

4. 顺序表尾插

int insert_rear(datatype value,Seqlist *list)  //实现尾插
{
	if(NULL==list||full_list(list))
		return -1;
	list->data[list->len]=value;
	list->len++;
	return 0;
}

5. 顺序表尾删

int delete_rear(Seqlist *list)  //实现尾删
{
	if(NULL==list||empty_list(list))
		return -1;
	list->len--;
	return 0;
}

6.  实现任意下标查找

datatype search_by_sub(int sub,Seqlist *list)  //实现任意下标查找
{
	if(NULL==list||empty_list(list)||sub<0||sub>=list->len)
		return -1;
	return list->data[sub];
}

7. 实现任意下标修改

int modify_list(int sub,datatype modify,Seqlist *list)  //实现任意下标修改
{
	if(NULL==list||empty_list(list)||sub<0||sub>=list->len)
		return -1;
	list->data[sub]=modify;
	return 0;
}

8. 实现任意下标插入

int insert_list(int sub,datatype value,Seqlist *list)  //实现任意下标插入
{
	if(NULL==list||full_list(list)||sub<0||sub>list->len)
		return -1;
	for(int i=list->len-1;i>=sub;i--)
	{
		list->data[i+1]=list->data[i];
	}
	list->data[sub]=value;
	list->len++;
	return 0;
}

9. 实现任意下标删除

int delete_list(int sub,Seqlist *list)  //实现任意下标删除
{
	if(NULL==list||empty_list(list)||sub<0||sub>=list->len)
		return -1;
	for(int i=sub;i<list->len-1;i++)
	{
		list->data[i]=list->data[i+1];
	}
	list->len--;
	return 0;
}

10. 实现任意元素修改

int modify_by_element(datatype value,datatype modify,Seqlist *list)  //实现任意元素修改
{
	if(NULL==list||empty_list(list))
		return -1;
	for(int i=0;i<list->len;i++)
	{
		if(list->data[i]==value)
		{
			list->data[i]=modify;
			return 0;
		}
	}
	printf("the value was not found\n");
	return -1;
}

11. 实现任意元素查找

int search_by_element(datatype value,Seqlist *list)  //实现任意元素查找
{
	if(NULL==list||empty_list(list))
		return -1;
	for(int i=0;i<list->len;i++)
	{
		if(value==list->data[i])
			return i;
	}
	printf("the value was not found\n");
	return -1;
}

12. 实现任意元素插入

int insert_by_element(datatype value,datatype modify,Seqlist *list)  //实现任意元素插入
{
	int sub=search_by_element(value,list);
	if(sub==-1)
		return -1;
	insert_list(sub,modify,list);
	return 0;
}

13. 实现任意元素删除

int delete_by_element(datatype value,Seqlist *list)  //实现任意元素删除
{
	int sub=search_by_element(value,list);
	if(sub==-1)
		return -1;
	delete_list(sub,list);
	return 0;
}

14. 实现顺序表去重

int delete_repeat(Seqlist *list)  //实现顺序表去重
{
	if(NULL==list||empty_list(list))
		return -1;
	for(int i=0;i<list->len-1;i++)
	{
		for(int j=i+1;j<list->len;j++)
		{
			if(list->data[i]==list->data[j])
			{
				delete_list(j,list);
				j--;  //防止漏删
			}
		}
	}
	return 0;
}

15. 实现顺序表排序

int sort_list(Seqlist *list)  //实现顺序表排序
{
	int count;
	if(NULL==list||empty_list(list))
		return -1;
	for(int i=1;i<list->len;i++)
	{
		count=0;
		for(int j=0;j<list->len-i;j++)
		{
			if(list->data[j]>list->data[j+1])
			{
				datatype temp=list->data[j];list->data[j]=list->data[j+1];list->data[j+1]=temp;
				count++;
			}
		}
		if(count==0)break;
	}
	return 0;
}

16.  实现顺序表合并

int combine_list(Seqlist *list,Seqlist *list_b,Seqlist *list_c)  //顺序表合并
{
	int p=0,q=0;
	while(p<list->len&&q<list_b->len)
	{
		if(list->data[p]<=list_b->data[q])
			list_c->data[list_c->len++]=list->data[p++];
		else
			list_c->data[list_c->len++]=list_b->data[q++];
	}
	while(p<list->len)
	{
		list_c->data[list_c->len++]=list->data[p++];
	}
	while(q<list_b->len)
	{
		list_c->data[list_c->len++]=list_b->data[q++];
	}
	return 0;
}

四、分布编译实现顺序表增删改查【完整代码】

头文件 head.h

#ifndef __HEAD_H__
#define __HEAD_H__

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXSIZE 8

typedef int datatype;
typedef struct
{
	int len;
	datatype data[MAXSIZE];
}Seqlist;

Seqlist * Request_space(void);  //顺序表创建空间
int full_list(Seqlist *list);  //判断顺序表长度是否为满
int empty_list(Seqlist *list);  //判断顺序表长度是否为空
int insert_rear(datatype value,Seqlist *list);  //实现尾插
void Output(Seqlist *list);  //实现输出
int delete_rear(Seqlist *list);  //实现尾删
datatype search_by_sub(int sub,Seqlist *list);  //实现任意下标查找
int modify_list(int sub,datatype modify,Seqlist *list);  //实现任意下标修改
int insert_list(int sub,datatype value,Seqlist *list);  //实现任意下标插入
int delete_list(int sub,Seqlist *list);  //实现任意下标删除
int search_by_element(datatype value,Seqlist *list);  //实现任意元素查找
int modify_by_element(datatype value,datatype modify,Seqlist *list);  //实现任意元素修改
int insert_by_element(datatype value,datatype modify,Seqlist *list);  //实现任意元素插入
int delete_by_element(datatype value,Seqlist *list);  //实现任意元素删除
int delete_repeat(Seqlist *list);  //实现顺序表去重
int sort_list(Seqlist *list);  //实现顺序表排序
int combine_list(Seqlist *list,Seqlist *list_b,Seqlist *list_c);  //顺序表合并

#endif

自定义函数 fun.c

#include "head.h"

Seqlist *Request_space(void) //创建空间
{
	Seqlist *list=(Seqlist *)malloc(sizeof(Seqlist));
	if(NULL==list)
		return NULL;
	list->len=0;
	memset(list->data,0,sizeof(datatype)*MAXSIZE);
	return list;
}
int empty_list(Seqlist *list)  //判断顺序表长度是否为空
{	
	return list->len==0?-1:0;
}
int full_list(Seqlist *list)  //判断顺序表长度是否为满
{
	return list->len==MAXSIZE?-1:0;
}
int insert_rear(datatype value,Seqlist *list)  //实现尾插
{
	if(NULL==list||full_list(list))
		return -1;
	list->data[list->len]=value;
	list->len++;
	return 0;
}
void Output(Seqlist *list)  //实现输出
{
	if(NULL==list||empty_list(list))
		return ;
	for(int i=0;i<list->len;i++)
	printf("%d ",list->data[i]);
	puts("");
}
int delete_rear(Seqlist *list)  //实现尾删
{
	if(NULL==list||empty_list(list))
		return -1;
	list->len--;
	return 0;
}
datatype search_by_sub(int sub,Seqlist *list)  //实现任意下标查找
{
	if(NULL==list||empty_list(list)||sub<0||sub>=list->len)
		return -1;
	return list->data[sub];
}
int modify_list(int sub,datatype modify,Seqlist *list)  //实现任意下标修改
{
	if(NULL==list||empty_list(list)||sub<0||sub>=list->len)
		return -1;
	list->data[sub]=modify;
	return 0;
}
int insert_list(int sub,datatype value,Seqlist *list)  //实现任意下标插入
{
	if(NULL==list||full_list(list)||sub<0||sub>list->len)
		return -1;
	for(int i=list->len-1;i>=sub;i--)
	{
		list->data[i+1]=list->data[i];
	}
	list->data[sub]=value;
	list->len++;
	return 0;
}
int delete_list(int sub,Seqlist *list)  //实现任意下标删除
{
	if(NULL==list||empty_list(list)||sub<0||sub>=list->len)
		return -1;
	for(int i=sub;i<list->len-1;i++)
	{
		list->data[i]=list->data[i+1];
	}
	list->len--;
	return 0;
}
int modify_by_element(datatype value,datatype modify,Seqlist *list)  //实现任意元素修改
{
	if(NULL==list||empty_list(list))
		return -1;
	for(int i=0;i<list->len;i++)
	{
		if(list->data[i]==value)
		{
			list->data[i]=modify;
			return 0;
		}
	}
	printf("the value was not found\n");
	return -1;
}
int search_by_element(datatype value,Seqlist *list)  //实现任意元素查找
{
	if(NULL==list||empty_list(list))
		return -1;
	for(int i=0;i<list->len;i++)
	{
		if(value==list->data[i])
			return i;
	}
	printf("the value was not found\n");
	return -1;
}
int insert_by_element(datatype value,datatype modify,Seqlist *list)  //实现任意元素插入
{
	int sub=search_by_element(value,list);
	if(sub==-1)
		return -1;
	insert_list(sub,modify,list);
	return 0;
}
int delete_by_element(datatype value,Seqlist *list)  //实现任意元素删除
{
	int sub=search_by_element(value,list);
	if(sub==-1)
		return -1;
	delete_list(sub,list);
	return 0;
}
int delete_repeat(Seqlist *list)  //实现顺序表去重
{
	if(NULL==list||empty_list(list))
		return -1;
	for(int i=0;i<list->len-1;i++)
	{
		for(int j=i+1;j<list->len;j++)
		{
			if(list->data[i]==list->data[j])
			{
				delete_list(j,list);
				j--;  //防止漏删
			}
		}
	}
	return 0;
}
int sort_list(Seqlist *list)  //实现顺序表排序
{
	int count;
	if(NULL==list||empty_list(list))
		return -1;
	for(int i=1;i<list->len;i++)
	{
		count=0;
		for(int j=0;j<list->len-i;j++)
		{
			if(list->data[j]>list->data[j+1])
			{
				datatype temp=list->data[j];list->data[j]=list->data[j+1];list->data[j+1]=temp;
				count++;
			}
		}
		if(count==0)break;
	}
	return 0;
}
int combine_list(Seqlist *list,Seqlist *list_b,Seqlist *list_c)  //顺序表合并
{
	int p=0,q=0;
	while(p<list->len&&q<list_b->len)
	{
		if(list->data[p]<=list_b->data[q])
			list_c->data[list_c->len++]=list->data[p++];
		else
			list_c->data[list_c->len++]=list_b->data[q++];
	}
	while(p<list->len)
	{
		list_c->data[list_c->len++]=list->data[p++];
	}
	while(q<list_b->len)
	{
		list_c->data[list_c->len++]=list_b->data[q++];
	}
	return 0;
}

主函数 main.c

#include "head.h"
int main(int argc, const char *argv[])
{
	Seqlist *list=Request_space();
	int n;
	printf("please enter n:");
	scanf("%d",&n);
	datatype value;//定义变量--存储的值
	for(int i=0;i<n;i++)
	{
		printf("please enter a value:");
		scanf("%d",&value);
		insert_rear(value,list);
	}
	Output(list);
	int sub;//定义变量--下标

 	printf("please enter a sub:");
	scanf("%d",&sub);
	printf("%d\n",search_by_sub(sub,list));

	
	datatype modify;//定义变量--需要修改的值

	printf("please enter a sub you want to modify:");
	scanf("%d",&sub);
	printf("please enter a value you want to modify:");
	scanf("%d",&modify);
	modify_list(sub,modify,list);
	Output(list);

	printf("please enter a sub you want to insert:");
	scanf("%d",&sub);
	printf("please enter a value you want to insert:");
	scanf("%d",&value);
	insert_list(sub,value,list);
	Output(list);

	printf("please enter a sub you want to delete:");
	scanf("%d",&sub);
	delete_list(sub,list);
	Output(list);

	printf("please enter the value you want to find:");
	scanf("%d",&value);
	printf("please enter a value you want to insert:");
	scanf("%d",&modify);
	insert_by_element(value,modify,list);
	Output(list);

	printf("please enter the value you want to find:");
	scanf("%d",&value);
	delete_by_element(value,list);
	Output(list);

	delete_repeat(list);
	sort_list(list);
	Output(list);
	
	Seqlist *list_b=Request_space();
	printf("please enter n:");
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{ 
		printf("please enter a value:");
		scanf("%d",&value);
		insert_rear(value,list_b);
	}
	Output(list);
	Seqlist *list_c=Request_space();
	combine_list(list,list_b,list_c);
	Output(list_c);
	return 0;
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值