栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构(0719-林雪阵)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构(0719-林雪阵)

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

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

头文件:

#ifndef __HEAD_H__
#define __HEAD_H__

#include 
#include 
#include 

#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;ilen;i++)
	{
		printf("%dt",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;ilen;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;ilen;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;ilen;i++)
	{
		for(j=0;jlen-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;ilen;i++)
	{
		datatype max=S->data[i];
		for(j=i;jlen;j++)
		{
			if(tempdata[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;jdata[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个位置的数据为%dn",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;
}

结果:

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1018119.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号