数据结构(0719-林雪阵)

顺序表的创建、输入、判空、判满、添加、遍历、删除、冒泡排序、选择排序

按值查找/删除,按位置查找/删除、释放等功能函数,主函数,头文件如下:

头文件:

#ifndef __HEAD_H__
#define __HEAD_H__

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

#define MAX 20

typedef int datatype;

typedef struct{;

	datatype data[MAX];
	int len;
	
}seqlist;

//创建顺序表
seqlist* list_create();
//判空函数
int list_empty(seqlist *S);
//判满函数
int list_full(seqlist *S);
//添加元素
int list_add(seqlist *S,datatype e);
//显示数据
void list_show(seqlist *S);
//任意位置插入
int list_insert(seqlist *S,int pos,datatype e);
//任意位置删除
int list_delete(seqlist*S,int pos);
//按值查找,返回对应的位置
int list_search_value(seqlist *S,datatype e);
//按位置查找,并返回查找成功后的值
datatype list_search_pos(seqlist *S,int pos);
//按值修改
int list_update_value(seqlist *S,datatype old_e,datatype new_e);
//按位置修改
int list_update_pos(seqlist *S,int pos,datatype new_e);
//排序
void list_sort(seqlist *S);
//选择排序
void list_selt_sort(seqlist *S);
//去重
void list_delte_repeat(seqlist *S);
//释放表
void list_free(seqlist **S);
#endif

功能函数(func.c)

#include "head.h"

//创建顺序表
seqlist* list_create()
{
	//在堆区申请一个顺序表空间,将首地址给S
	seqlist *S=(seqlist*)malloc(sizeof(seqlist));
	if(NULL==S)
	{
		puts("申请空间失败");
		return NULL;
	}

	//将数组和顺序表初始化置零
	memset(S->data,0,sizeof(S->data));
	S->len=0;
	puts("创建成功");
	return S;
}

//判空函数
int list_empty(seqlist *S)
{
	return S->len==0 ? 1:0;
}
//判满函数
int list_full(seqlist *S)
{
	return S->len==MAX ? 1:0; //0表示不满,1表示满
}

//添加元素
int list_add(seqlist *S,datatype e)
{
	//判断是否为满
	if(list_full(S))
	{
		printf("表满,无法插入!\n");
		return -1;
	}
	//添加逻辑
	S->data[S->len]=e;
	S->len++;
	printf("添加成功\n");
	return 0;
}

//显示数据
void list_show(seqlist *S)
{
	if(NULL==S)
	{
		printf("表不存在\n");
		return;
	}
	if(list_empty(S))
	{
		printf("空空如也,遍历个der!\n");
		return;
	}
	printf("目前顺序表的顺序是:");
	for(int i=0;i<S->len;i++)
	{
		printf("%d\t",S->data[i]);
	}
	printf("\n");
}

//任意插入,删除
int list_insert(seqlist *S,int pos,datatype e)
{
	//判断逻辑
	if(pos<0 || pos>S->len ||list_full(S))
	{
		printf("插入失败!\n");
		return -1;
	}
	//腾空
	for(int i=S->len-1;i>=pos;i--)
	{
		S->data[i+1]=S->data[i];
	}
	//插入数据
	S->data[pos]=e;
	//表的变化
	printf("插入成功!\n");
	S->len++;
	return 0;
}
//任意位置删除
int list_delete(seqlist*S,int pos)
{
	//判断逻辑
	if(list_empty(S))
	{
		printf("已为空,无法删除!\n");
		return -1;
	}
	if(pos<0 || pos>S->len-1)
	{
		printf("删除位置不合法!\n");
		return -2;
	}
	//删除数据
	for(int i=pos;i<S->len;i++)
	{
		S->data[i]=S->data[i+1];
	}
	//表的变化
	S->len--;
	printf("删除成功!\n");
	return 0;
}
//按值查找,返回对应的位置
int list_search_value(seqlist *S,datatype e)
{
	//判断逻辑
	if(list_empty(S))
	{
		printf("该表为空\n");
		return -1;
	}
	//按值查找
	for(int i=0;i<S->len;i++)
	{
		if(e==S->data[i])
		{
			printf("查找成功\n");
			return i;
		}
	}
	printf("查找失败!\n");
	return -2;
	
}
//按位置查找,并返回查找成功后的值
datatype list_search_pos(seqlist *S,int pos)
{
	//判断逻辑
	if(list_empty(S))
	{
		printf("该表为空\n");
		return -1;
	}
	if(pos<0 || pos>S->len-1)
	{
		printf("该位置不合法!\n");
		return -2;
	}
	printf("查找成功\n");
	return S->data[pos];
}
//按值修改
int list_update_value(seqlist *S,datatype old_e,datatype new_e)
{
	int pos=-1;
	pos=list_search_value(S,old_e);
	if(pos>=0)
	{
		S->data[pos]=new_e;
		printf("修改成功\n");
		return 0;
	}else
	{
		printf("修改失败\n");
		return -1;
	}
}
//按位置修改
int list_update_pos(seqlist *S,int pos,datatype new_e)
{
	//判断逻辑
	if(pos<0 || pos>S->len-1)
	{
		printf("该位置不合法!\n");
		return -1;
	}
	//修改对应位置内容
	S->data[pos]=new_e;
	printf("修改成功\n");
	return 0;
}
//冒泡排序
void list_sort(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");
}
//选择排序
void list_selt_sort(seqlist *S)
{
	int i,j,index;
	datatype temp;
	for(i=0;i<S->len;i++)
	{
		datatype max=S->data[i];
		for(j=i;j<S->len;j++)
		{
			if(temp<S->data[j])
			{
				max=S->data[j];
				index=j;
			}
		}
		temp=S->data[i];
		S->data[i]=max;
		S->data[index]=temp;
	}
	return;
}
//去重
void list_delte_repeat(seqlist *S)
{
	if(S->len<=1)
	{
		printf("去重失败\n");
		return;
	}
	int index=1;
	int i,j;
	for(i=1;i<=S->len-1;i++)
	{
		for(j=0;j<index;j++)
		{
			if(S->data[j]==S->data[i])
			{
				break;
			}
		}
		if(j==index)
		{
			S->data[index]=S->data[i];
			index++;
		}
	}
	S->len=index;
}
//释放表
void list_free(seqlist **S)
{
	if(NULL!=*S)
	{
		free(*S);
	}
	*S=NULL;
	printf("释放成功\n");
}

主函数(main.c)

#include "head.h"

int main(int argc, const char *argv[])
{
	//创建顺序表
	seqlist *S=list_create();
	if(NULL==S)
	{
		puts("申请空间失败");
		return -1;
	}

	//顺序插入数据
	list_add(S,3);
	list_add(S,4);
	list_add(S,5);
	list_add(S,6);
	list_add(S,7);
				
	//显示数据
	list_show(S);

	//按照位置插入数据
	list_insert(S,2,6);
	list_show(S);

	//删除数据
	list_delete(S,2);
	list_show(S);

	//按值查找
	int res1=list_search_value(S,4);
	if(res1>=0)
	{
		printf("第%d个位置的数据为%d\n",res1,4);
	}else if(res1 == -2)
	{
		printf("查找失败\n");
	}else if(res1 == -1)
	{
		printf("该表为空\n");
	}
	//按位置查找
	list_search_pos(S,2);
	
	//按值修改
	//按位置修改
	list_update_pos(S,2,10);
	list_show(S);

	//排序
	list_sort(S);
	list_show(S);
	
	//

	list_selt_sort(S);
	list_show(S);
	list_delte_repeat(S);
	list_show(S);

	list_free(&S);
	list_show(S);	
	return 0;
}

结果:

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

林某某..

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

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

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

打赏作者

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

抵扣说明:

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

余额充值