数据结构顺序表的学习(7.17)

一、顺序表的操作练习

主函数:

#include "head.h"
int main(int argc, const char *argv[])
{
	//申请空间
	Seqlist *list=create_list();
	//

	int n;
	printf("请输入n的值:");
	scanf("%d",&n);
	datatype e;
	for(int i=0;i<n;i++)
	{
		printf("请输入元素:");
		scanf("%d",&e);
		insert_rear(e,list);  //进行尾插
	}
	//输出
	Output(list);
	//尾部删除
	Delete(list);

	Output(list);
	//按顺序表下标任意查找
	int sub;
	printf("请输入要查找的下标:");
	scanf("%d",&sub);
	e=Serach_sub(sub,list);
	if(e!=-1)
	{
		printf("该下标对应的值为:%d\n",e);
	}

	//按顺序表任意下标修改
	printf("请输入要修改的位置:");
	scanf("%d",&sub);
	printf("请输入要修改的值:");
	scanf("%d",&e);
	Update_sub(list,sub,e);
	Output(list);

	//按顺序任意下标插入
	printf("请输入要插入的下标:");
	scanf("%d",&sub);
	printf("请输入要插入的元素:");
	scanf("%d",&e);
	Inserte_sub(list,sub,e);
	Output(list);

	//按顺序任意下标删除
	printf("请输入要删除的下标:");
	scanf("%d",&sub);
	Delete_sub(list,sub);
	Output(list);

	//顺序表任意元素查找
	datatype key;
	printf("请输入要查找的元素:");
	scanf("%d",&key);
	printf("查找到的元素为:%d\n",Serach_data(key,list));


	//顺序表按任意元素插入
	printf("请输入要插入的元素:");
	scanf("%d",&key);
	printf("请输入被插入的元素:");
	scanf("%d",&e);
	Inserte_data(list,key,e);
	Output(list);

	//顺序表任意元素修改
	printf("请输入要修改的元素:");
	scanf("%d",&key);
	printf("请输入修改后的元素:");
	scanf("%d",&e);
	Update_data(list,key,e);
	Output(list);

	//顺序表任意元素删除
	printf("请输入要删除的元素:");
	scanf("%d",&key);
	Delete_data(key,list);
	Output(list);

	//顺序表去重
	Delete_repeat(list);
	Output(list);

	//顺序表合并
	//创建la
	Seqlist *la=create_list();
	int n;
	printf("请输入n的值:");
	scanf("%d",&n);
	datatype e;
	for(int i=0;i<n;i++)
	{
		printf("请输入la元素:");
		scanf("%d",&e);
		insert_rear(e,la);  //进行尾插
	}
	//创建lb
	Seqlist *lb=create_list();
	printf("请输入n的值:");
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
		printf("请输入lb元素:");
		scanf("%d",&e);
		insert_rear(e,lb);  //进行尾插
	}
	//创建lc
	Seqlist *lc=create_list();
	//顺序表合并
	Combine(la,lb,lc);
	Output(lc);

	Seqlist *list=create_list();
	int n;
	printf("请输入n的值:");
	scanf("%d",&n);
	datatype e;
	for(int i=0;i<n;i++)
	{
		printf("请输入元素:");
		scanf("%d",&e);
		insert_rear(e,list);  //进行尾插
	}
	Bubble(list,n);
	Output(list);
	return 0;
}


头文件:

//预处理命令
//全局变量
//函数声明
#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 *create_list();
//判断是否为满
int full_list(Seqlist *list);
//进行尾插
int insert_rear(datatype e,Seqlist *list);
//判断是否为空
int empty(Seqlist *list);
//输出
void Output(Seqlist *list);
//尾部删除
int Delete(Seqlist *list);
//按顺序下标任意查找
int Serach_sub(int sub,Seqlist *list);
//按顺序下标任意修改
int Update_sub(Seqlist *list,int sub,datatype e);
//按顺序下标任意插入
int Inserte_sub(Seqlist *list,int sub,datatype e);
//按顺序下标任意删除
int Delete_sub(Seqlist *list,int sub);
//按顺序表任意元素查找
int Serach_data(datatype key,Seqlist *list);
//顺序表按任意元素插入
int Inserte_data(Seqlist *list,datatype key,datatype e);
//顺序表按任意元素修改
int Update_data(Seqlist *list,datatype key,datatype e);
//顺序表按任意元素删除
int Delete_data(datatype key,Seqlist *list);
//顺序表去重
int Delete_repeat(Seqlist *list);
//顺序表合并
void Combine(Seqlist *la,Seqlist *lb,Seqlist *lc);
//顺序表排序
int Bubble(Seqlist *list,int len);
#endif

函数封装:

#include "head.h"
/*
 * function:    申请空间
 * @param [ in] 
 * @param [out] 
 * @return      
 */
Seqlist *create_list()
{
	Seqlist *list=(Seqlist *)malloc(sizeof(Seqlist));
	if(NULL==list)
	{
		return NULL;
	}
	return list;
	list->len=0;  //顺序表长度清零
	memset(list->data,0,sizeof(list->data));
}
/*
 * function:    判断是否为满
 * @param [ in] 
 * @param [out] 
 * @return      满则返回-1,不满则返回0
 */
int full_list(Seqlist *list)
{
	return list->len==MAXSIZE?-1:0;
}
/*
 * function:    进行尾插
 * @param [ in] 
 * @param [out] 
 * @return      成功则返回0,失败则返回-1;
 */
int insert_rear(datatype e,Seqlist *list)
{
	if(NULL==list||full_list(list))
	{
		printf("insert rear error\n");
		return -1;
	}
	list->data[list->len]=e;
	list->len++;
	return 0;
}
/*
 * function:   判断顺序表是否为空 
 * @param [ in] 
 * @param [out] 
 * @return      空返回-1.非空返回0;
 */
int empty(Seqlist *list)
{
	return list->len==0?-1:0;
}
/*
 * function:    输出
 * @param [ in] 
 * @param [out] 
 * @return      
 */
void Output(Seqlist *list)
{
	if(NULL==list || empty(list))
	{
		printf("输出错误\n");
		return;
	}
	for(int i=0;i<list->len;i++)
	{
		printf("%d\t",list->data[i]);
	}
	puts("");
}
/*
 * function:    尾部删除
 * @param [ in] 
 * @param [out] 
 * @return      成功返回0,失败返回-1;
 */
int Delete(Seqlist *list)
{
	if(NULL==list || empty(list))
	{
		printf("删除错误\n");
		return -1;
	}
	printf("要删除的元素为:%d\n",list->data[list->len-1]);
	list->len--;
	return 0;
}
/*
 * function:    按任意下标查找
 * @param [ in] 
 * @param [out] 
 * @return      不存在返回-1,存在返回查找值
 */
int Serach_sub(int sub,Seqlist *list)
{
	if(NULL==list||empty(list)||sub<0||sub>=list->len)
	{	
		return -1;
		printf("查找失败\n");
	}
	return list->data[sub];
}
/*
 * function:    修改
 * @param [ in] 
 * @param [out] 
 * @return      
 */
int Update_sub(Seqlist *list,int sub,datatype e)
{
	if(NULL==list||empty(list)||sub<0||sub>=list->len)
	{
		return -1;
		printf("修改失败\n");
	}
	list->data[sub]=e;
	return 0;
}
/*
 * function:    插入
 * @param [ in] 
 * @param [out] 
 * @return      
 */
int Inserte_sub(Seqlist *list,int sub,datatype e)
{
	if(NULL==list||full_list(list)||sub<0||sub>list->len)
	{
		printf("插入失败\n");
		return -1;
	}
	for(int i=list->len-1;i>=sub;i--)
	{
		list->data[i+1]=list->data[i];
	}
	list->data[sub]=e;
	list->len++;
	return 0;
}
/*
 * function:   删除
 * @param [ in] 
 * @param [out]
 * @return      
 */
int Delete_sub(Seqlist *list,int sub)
{
	if(NULL==list||empty(list)||sub<0||sub>=list->len)
	{
		printf("删除失败\n");
		return -1;
	}
	for(int i=sub;i<=list->len-1;i++)
	{
		list->data[i]=list->data[i+1];
	}
	list->len--;
	return 0;
}
/*
 * function:    顺序表按任意元素查找
 * @param [ in] 
 * @param [out] 
 * @return      
 */
int Serach_data(datatype key,Seqlist *list)
{
	if(NULL==list||empty(list))
	{
		printf("查找失败\n");
		return -1;
	}
	for(int i=0;i<list->len;i++)
	{
		if(key==list->data[i])
			return i;
	}
	return -1;
}
/*
 * function:    顺序表按任意元素插入
 * @param [ in] 
 * @param [out] 
 * @return      
 */
int Inserte_data(Seqlist *list,datatype key,datatype e)
{
	if(NULL==list||full_list(list))
	{
		printf("插入失败\n");
		return -1;
	}
	int sub=Serach_data(key,list);
	Inserte_sub(list,sub,e);
	return 0;
}
/*
 * function:    顺序表按任意元素修改
 * @param [ in] 
 * @param [out] 
 * @return      
 */
int Update_data(Seqlist *list,datatype key,datatype e)
{
	if(NULL==list||empty(list))
	{
		printf("修改失败\n");
		return -1;
	}
	for(int i=0;i<list->len;i++)
	{
		if(key==list->data[i])
		{
			list->data[i]=e;
			return 0;
		}
	}
	return -1;
}
/*
 * function:    顺序表按任意元素删除
 * @param [ in] 
 * @param [out] 
 * @return      
 */
int Delete_data(datatype key,Seqlist *list)
{
	if(NULL==list||empty(list))
	{
		printf("删除失败\n");
		return -1;
	}
	int num=Serach_data(key,list);
	Delete_sub(list,num);
	return 0;
}
/*
 * function:    去重
 * @param [ in] 
 * @param [out] 
 * @return      
 */
int Delete_repeat(Seqlist *list)
{
	if(NULL==list||empty(list))
	{
		printf("去重失败\n");
		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_sub(list,j);
				j--;
			}
		}
	}
	return 0;
}
//顺序表合并
void Combine(Seqlist *la,Seqlist *lb,Seqlist *lc)
{
	int i=0,j=0;
	while(i<la->len && j<lb->len)
	{
		if(la->data[i]<=lb->data[j])
			lc->data[lc->len++]=la->data[i++];
		else
			lc->data[lc->len++]=lb->data[j++];	
	}
	while(i<la->len)
	{
		lc->data[lc->len++]=la->data[i++];
	}
	while(j<lb->len)
	{
		lc->data[lc->len++]=lb->data[j++];	
	}
}
/*
 * function:    顺序表排序
 * @param [ in] 
 * @param [out] 
 * @return      
 */
int Bubble(Seqlist *list,int len)
{
	if(NULL==list||empty(list))
	{
		printf("排序失败\n");
		return -1;
	}
	for(int i=1;i<len;i++)
	{
		for(int j=0;j<len-i;j++)
		{
			if(list->data[j]>list->data[j+1])
			{
				int t=list->data[j];list->data[j]=list->data[j+1];
				list->data[j+1]=t;
			}
		}
	}
	return 0;
}

二、Xmind思维导图

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值