数据结构——顺序表

 seqlist.h文件

#ifndef SEQLIST_H
#define SEQLIST_H
#include<myhead.h>

#define MAX 20
typedef int datatype;

//定义顺序表结构类型
typedef struct
{
    datatype data[MAX];
    int len;
} SeqList, *SeqListPtr;

//声明顺序表的创建函数
SeqListPtr list_create();

//判空函数
int list_empty(SeqListPtr L);

//判满函数
int list_full(SeqListPtr L);

//添加元素
int list_add(SeqListPtr L,datatype e);

//遍历顺序表
void list_show(SeqListPtr L);

//定义任意位置插入函数
int list_insert_pos(SeqListPtr L, int pos,datatype e);

//定义任意位置删除函数
int list_delete_pos(SeqListPtr L,int pos);

//定义按值查找位置函数
int list_sarch_value(SeqListPtr L,datatype e);

//按位置进行修改
int list_updata_pos(SeqListPtr L,int pos,datatype e);

//按值进行修改
int list_updata_value(SeqListPtr L,datatype old_e,datatype new_e);


#endif

seqlist.c文件

#include"seqlist.h"

//定义顺序表的创建函数
SeqListPtr list_create()
{
	SeqListPtr L=(SeqListPtr)malloc(sizeof(SeqList));
	if(NULL==L)
	{
		printf("创建失败\n");
		return NULL;
	}

	memset(L->data, 0, sizeof(L->data));
	L ->len =0;

	printf("创建成功\n");
	return L;
}

//判空函数
int list_empty(SeqListPtr L)
{
	return L->len==0;
}

//判满函数,满返回真,非满返回假
int list_full(SeqListPtr L)
{
	return L->len==MAX;
}

//添加元素
int list_add(SeqListPtr L,datatype e)
{
	if(NULL==L || list_full(L))
	{
		printf("添加失败");
		return -1;
	}
	//添加逻辑:将要添加的元素放到最后一个位置
	L->data[L->len]=e;
	//表的变化
	L->len++;
	printf("添加成功\n");
	return 0;
}

//遍历顺序表
void list_show(SeqListPtr L)
{
	//判断逻辑
	if(NULL==L || list_empty(L))
	{
		printf("遍历失败\n");
		return ;
	}
	//遍历
	printf("顺序表中的元素分别是:");
	for(int i=0;i<L->len;i++)
	{
		printf("%d\t",L->data[i]);
	}
	printf("\n");
}

//定义任意位置插入函数
int list_insert_pos(SeqListPtr L, int pos,datatype e)
{
	//判断逻辑
	if(NULL==L || list_full(L) || pos<0 || pos>L->len)
	{
		printf("插入失败\n");
		return -1;
	}

	//腾空逻辑
	for(int i=L->len;i>=pos;i--)
	{
		L->data[i+1]=L->data[i];	//将前面的元素后移
	}

	//插入数据
	L->data[pos]=e;

	//表长变化
	L->len++;
	printf("插入成功\n");
	return 0;
}

//定义任意位置删除函数
int list_delete_pos(SeqListPtr L,int pos)
{
	if(NULL==L || list_empty(L) || pos<0 || pos>=L->len)
	{
		printf("删除失败\n");
		return -1;
	}
	
	//删除逻辑
	for(int i=pos+1;i<L->len;i++)
	{
		L->data[i-1]=L->data[i];
	}

	//表长变化
	L->len--;
	printf("删除成功\n");
	return 0;
}

//定义按值查找位置函数
int list_sarch_value(SeqListPtr L,datatype e)
{
	//判空逻辑
	if(NULL==L || list_empty(L))
	{
		printf("查找失败\n");
		return -1;
	}
	//遍历整个顺序表
	for(int i=0;i<L->len;i++)
	{
		if(L->data[i]==e)
		{
			return i;
		}
	}
	printf("没找到\n");
	return -1;
}

//定义按位置修改函数
int list_updata_pos(SeqListPtr L,int pos,datatype e)
{
	//判空
	if(NULL ==L || pos<0 || pos>L->len)
	{
		printf("修改失败\n");
		return -1;
	}

	//按位置就正常进行修改
	L->data[pos]=e;
	printf("修改成功\n");
	return 0;
}

//定义按值修改函数
int list_updata_value(SeqListPtr L,datatype old_e,datatype new_e)
{
	//判空
	if(NULL==L || list_empty(L))
	{
		printf("修改失败\n");
		return -1;
	}

	//按照旧值找到位置
	int res=list_sarch_value(L,old_e);
	if(res==-1)
	{
		printf("没找到要修改的值\n");
		return -1;
	}
	//调用按位置修改值函数
	list_updata_pos(L,res,new_e);
	printf("修改成功\n");
	return 0;
}

main.c文件

 

#include "seqlist.h"
#include<myhead.h>

int main(int argc, char const *argv[])
{
	SeqListPtr L=list_create();
	if(NULL==L)
	{
		return -1;
	}

	//调添加函数
	list_add(L, 520);
	list_add(L, 1314);
	list_add(L, 999);
	list_add(L,666);

	//调用遍历函数
	list_show(L);

	//调用插入函数
	list_insert_pos(L,0,100);
	list_insert_pos(L,2,100);
	list_insert_pos(L,6,100);
	
	//输出
	list_show(L);

	//调用删除函数
	list_delete_pos(L,3);
	list_show(L);

	//调用查找函数
	int res=list_sarch_value(L,3);
	if(res>=0)
	{
		printf("您要查找的元素在第%d个位置\n",res+1);
	}

	//调用按位置修改函数
	list_updata_pos(L,0,555);
	list_show(L);

	//调用按值修改函数
	list_updata_value(L,999,996);
	list_show(L);



	return 0;
}

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值