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

数据结构0719作业-洪庆乐

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

数据结构0719作业-洪庆乐

seqlist.h :
#ifndef __SEQLIST_H__
#define __SEQLIST_H__

#include 
#include 
#include 

#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);
//按位置查找,返回对应的值
datatype listSearchPos(seqlist *S,int pos);
//按值修改
int listUpdateValue(seqlist *S,datatype old_e,datatype new_e);
//按位置修改
int listUpdatePos(seqlist *S,int pos,datatype new_e);
//排序
void listSort(seqlist *S);
//去重
void listDeleteRepeat(seqlist *S);
//释放表
void listFree(seqlist *S);
#endif
seqlist.c :
#include "seqlist.h"

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

	memset(S->data,0,sizeof(S->data));//将顺序表的数组清0
	S->len = 0;//顺序表的长度初始化

	printf("创建顺序表成功n");

	return S;
}

//判空函数-----------------------------------------------
int listEmpty(seqlist *S)
{	
	if ( NULL == S )
	{
		printf("所给顺序表不合法n");
		exit(0);
	}
	return S->len==0? 1:0; // 1表示空,0表示非空
}


//判满函数-----------------------------------------------
int listFULL(seqlist *S)
{	
	if ( NULL == S )
	{
		printf("所给顺序表不合法n");
		exit(0);
	}
	return S->len==MAX? 1:0; // 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;
	}
	for(int i = 0;i < S->len;i++)
	{
		printf("下标%d:%dn",i,S->data[i]);
	}
	printf("遍历成功n");
}
//任意位置插入---------------------------------------
int listInsertPos(seqlist *S,int pos,datatype e)
{
	if(pos < 0 || pos > S->len || listFULL(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;
	S->len++;
	printf("插入成功!n");
	return 0;
}
//任意位置删除---------------------------------------
int listDeletePos(seqlist *S,int pos)
{
	if(pos < 0 || pos > S->len-1 || listEmpty(S))
	{
		printf("删除非法!n");
		return -1;
	}
	for(int i = pos;i < S->len;i++)
	{
		S->data[i]=S->data[i+1];
	}
	S->len--;
	printf("删除%d成功!n",S->data[pos]);
	return 0;
}
//按值查找,返回对应的位置----------------------------
int listSearchValue(seqlist *S,datatype e)
{
	if(listEmpty(S))	
	{
		printf("数据表为空,无法查找n");
		return -1;
	}

	for(int i = 0;i < S->len;i++)
	{
		if(S->data[i] == e)
		{
			return i;
		}
	}
	return -2;
}
//按位置查找,返回对应的值-----------------------------
datatype listSearchPos(seqlist *S,int pos)
{
	if(pos < 0 || pos > S->len-1 || listEmpty(S))
	{
		printf("查找非法!n");
		return -1;
	}
	return S->data[pos];
}
//按值修改--------------------------------------------
int listUpdateValue(seqlist *S,datatype old_e,datatype new_e)
{
	for(int i = 0;i < S->len -1;i++)
	{
		if(S->data[i] == old_e)
		{
			S->data[i] = new_e;
		}
	}
	printf("所有%d值成功修改为%dn",old_e,new_e);
	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("下标%d成功修改为%dn",pos,new_e);
	return 0;
}
//排序-----------------------------------------------
void listSort(seqlist *S)
{
	int i;         
	int j;      
	int temp;      
	int index;      
	int min;       

for(i=0; ilen; i++)         
	{
		min = S->data[0];
		index = i;              
		for(j=i+1; j < S->len ; j++)
		{
			if(min < S->data[j])      
			{
				min = S->data[j];
				index = j;            
			}
		}
		if(index != i)
		{
			temp = S->data[i];
			S->data[i] = S->data[index];
			S->data[index] = temp;
		}
	}
	printf("排序成功n");
}
//去重-----------------------------------------------
void listDeleteRepeat(seqlist *S)
{
	for(int i = 0;i < S->len -1;i++)
	{
		for(int j = i + 1;j < S->len ;j++)
		{
			if(S->data[i] == S->data[j])
			{
				listDeletePos(S,j);
				j--;
			}
		}
	}
	printf("去重成功n");
}

//释放表-----------------------------------------------
void listFree(seqlist *S)
{
	if(NULL != S)
	{
		free(S);
	}
	S = NULL;

	printf("释放成功n");
}

main.c :
#include "seqlist.h"

int main(int argc, const char *argv[])
{
	//创建数据表函数
	printf("----调用创建函数---n");
	seqlist *S = listCreate();
	if ( NULL == S )
	{
		return -1;
	}
	
	//调用添加函数
	printf("----调用添加函数---n");
	listAdd(S,2);
	listAdd(S,5);
	listAdd(S,2);
	listAdd(S,5);
	listAdd(S,2);
	listAdd(S,5);
	listAdd(S,2);
	listAdd(S,5);
	listAdd(S,2);
	listAdd(S,7);
	listAdd(S,7);
	listAdd(S,7);
	listAdd(S,7);
	listAdd(S,7);
	listAdd(S,2);
	listAdd(S,5);

	//调用显示数据函数
	printf("----显示数据函数---n");
	listShow(S);

	//调用插入函数
	printf("------插入函数-----n");
	listInsertPos(S,1,3);
	listShow(S);

	//调用删除函数
	printf("------删除函数-----n");
	listDeletePos(S,1);
	listShow(S);

	//按值查找,返回对应的位置
	printf("-------按值查找-----n");
	datatype e = 7;
	int res = listSearchValue(S,e);
	if(res >= 0)
	{
		printf("查找成功,%d在下标%d的位置n",e,res);
	}else if (res == -1)
	{
		printf("表空n");
	}else if (res == -2)
	{
		printf("没有该值n");
	}

	//按位置查找,返回对应的值
	printf("-------按位置查找-----n");
	int pos = 2;
	int res2 = listSearchPos(S,pos);
	if(res2 != -1)
	{
		printf("查找成功,下标%d位置上值为:%dn",pos,res2);
	}else
	{
		printf("查找非法!n");
	}

	//按值修改
	printf("--------按值修改------n");
	listUpdateValue(S,1,3);


	//按位置修改
	printf("-------按位置修改-----n");
	listUpdatePos(S,2,100);
	listShow(S);

	//排序
	printf("---------排序-------n");
	listSort(S);
	listShow(S);


	//去重
	printf("---------去重-------n");
	listDeleteRepeat(S);
	listShow(S);


	//调用释放表函数
	printf("---------释放-------n");
	listFree(S);	
	S = NULL;
	listShow(S);

	return 0;
}
执行结果:
----调用创建函数---
创建顺序表成功
----调用添加函数---
数据添加成功
数据添加成功
数据添加成功
数据添加成功
数据添加成功
数据添加成功
数据添加成功
数据添加成功
数据添加成功
数据添加成功
数据添加成功
数据添加成功
数据添加成功
数据添加成功
数据添加成功
数据添加成功
----显示数据函数---
下标0:2
下标1:5
下标2:2
下标3:5
下标4:2
下标5:5
下标6:2
下标7:5
下标8:2
下标9:7
下标10:7
下标11:7
下标12:7
下标13:7
下标14:2
下标15:5
遍历成功
------插入函数-----
插入成功!
下标0:2
下标1:3
下标2:5
下标3:2
下标4:5
下标5:2
下标6:5
下标7:2
下标8:5
下标9:2
下标10:7
下标11:7
下标12:7
下标13:7
下标14:7
下标15:2
下标16:5
遍历成功
------删除函数-----
删除5成功!
下标0:2
下标1:5
下标2:2
下标3:5
下标4:2
下标5:5
下标6:2
下标7:5
下标8:2
下标9:7
下标10:7
下标11:7
下标12:7
下标13:7
下标14:2
下标15:5
遍历成功
-------按值查找-----
查找成功,7在下标9的位置
-------按位置查找-----
查找成功,下标2位置上值为:2
--------按值修改------
所有1值成功修改为3
-------按位置修改-----
下标2成功修改为100
下标0:2
下标1:5
下标2:100
下标3:5
下标4:2
下标5:5
下标6:2
下标7:5
下标8:2
下标9:7
下标10:7
下标11:7
下标12:7
下标13:7
下标14:2
下标15:5
遍历成功
---------排序-------
排序成功
下标0:100
下标1:5
下标2:2
下标3:5
下标4:2
下标5:5
下标6:2
下标7:5
下标8:2
下标9:7
下标10:7
下标11:7
下标12:7
下标13:7
下标14:2
下标15:5
遍历成功
---------去重-------
删除2成功!
删除2成功!
删除2成功!
删除0成功!
删除2成功!
删除2成功!
删除7成功!
删除0成功!
删除7成功!
删除7成功!
删除7成功!
删除0成功!
去重成功
下标0:100
下标1:5
下标2:2
下标3:7
遍历成功
---------释放-------
释放成功
所给顺序表不合法
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1017830.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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