我是靠谱客的博主 自信羽毛,最近开发中收集的这篇文章主要介绍顺序表的实现(全代码),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

先给大家看看我们将会编写的函数,不喜勿喷,在有些细节方面,可以自行修改。程序完整代码我放在最后,大家可以自行下载

seqlist_t *create_seqlist(void);        //创建一个空表
void clear_seqlist(seqlist_t *L);       //释放表
int is_empty_seqlist(seqlist_t *L);     //判断表是否为空
int is_full_seqlist(seqlist_t *L);      //判断表是否为满
void set_empty_seqlist(seqlist_t *L);   //将表设置为空
int get_lengh_seqlist(seqlist_t *L);    //获取表的长度
void show_seqlist(seqlist_t *L);        //显示表中的元素
int insert_seqlist(seqlist_t *L,data_t x,int pos);     //在表中pos位置插入元素x
int delete_seqlist(seqlist_t *L,int pos);              //删除表中pos位置的元素  
int change_seqlist(seqlist_t *L,data_t x,int pos);     //将表中pos位置的元素改成元素X
int search_seqlist(seqlist_t *L,data_t x);             //查找表中x元素

1.创建结构体

#define N 100  //为了方便后期修改顺序表容量,需要提前将容量宏定义
typedef  int data_t;   为数据类型起别名

//构建顺序表结构体
typedef struct
{
	data_t data[N];  //
	int last;        //表尾指针
}seqlist_t; 

2.创建一个空表

/**************************************
* 创建一个空表
* 1.定义一个顺序表赋值为NULL
* 2.使用malloc为该顺序表申请空间
* 3.判断申请空间是否成功 若不成功该表还是等于NULL 函数返回NULL
* 4.申请成功表尾指针(或表长)赋值为-1,表明这是一个初始化空表
**************************************/
seqlist_t *create_seqlist(void)  
{
	seqlist_t *L=NULL;
	L = (seqlist_t *)malloc(sizeof(seqlist_t));
	if(L == NULL )
	{
		puts("no memory");
		return NULL;
	}
	L->last = -1;
	return L;
}

3.创建了表我们就需要释放释放表

/**************************************
* 释放顺序表
* 1.如果表无效 退出函数
* 2.释放顺序表
* 3.退出
**************************************/
void clear_seqlist(seqlist_t *L)
{
	if(L == NULL)
	{
		puts("seqlist_t *L is NULL");
		return ;
	}
	free(L);
	return ;
}

4.判断表是否为满

/***********************************
* 判断顺序表是否已满
* 1.如果顺序表无效 退出
* 2.如果表已满 那么表尾指针指向(表长-1)
***********************************/
int is_full_seqlist(seqlist_t *L)
{
	if(L == NULL)
	{
		puts("seqlist_t *L is NULL");
		return -1;
	}
	return (L->last == N-1);
}

5.判断表是否为空

/***********************************
* 判断顺序表是否为空
* 1.如果顺序表无效 退出
* 2.如果表为空 那么表尾指针指向-1
***********************************/
int is_empty_seqlist(seqlist_t *L)
{
	if(L == NULL)
	{
		puts("seqlist_t *L is NULL");
		return -1;
	}
	return (L->last == -1);		
}

6.将顺序表设置为空

/***********************************
* 将顺序表设置为空
* 1.如果顺序表无效 退出
* 2.将表尾指针指向-1
***********************************/
void set_empty_seqlist(seqlist_t *L)
{
	if(L == NULL)
	{
		puts("seqlist_t *L is NULL");
		return ;
	}
	L->last = -1;
	return  ;
}

7.插入元素

/***********************************************
* 在顺序表中插入元素
* 1.表满 插入位置小于0 插入位置大于表长 返回-1
* 2. 从表尾往前到插入位置 遍历 
	当前位置--表尾 向后移动 ( L->data[i+1]=L->data[i] )
* 3.插入位置插入元素 
* 4.表长+1
* 5.返回0
***********************************************/
int insert_seqlist(seqlist_t *L,data_t x,int pos)
{
	int i=0;
	if( ( is_full_seqlist(L) )|| (pos<0) ||pos>L->last+1 )
	{
		puts("input argv is invalid");
		return -1;
	}
	for(i =L->last; i>=pos;i--)
	{
		L->data[i+1] = L->data[i];
	}
	L->data[pos] = x;
	L->last++;
	return 0; 
}

8.删除元素,在删除元素之前我们得获取表的表长

/***********************************
* 获取顺序表的长度
* 1.如果顺序表无效 退出
* 2.返回表位指针+1
***********************************/
int get_lengh_seqlist(seqlist_t *L)
{
	if(L == NULL)
	{
		puts("seqlist_t *L is NUL");
		return ;
	}
	return (L->last+1);
}

9.删除元素

/***********************************************
* 在顺序表中删除元素
* 1.表满 插入位置小于0 插入位置大于表长 返回-1
* 2. 当前位置到表尾遍历
	元素向前移动( L->data[i]=L->data[i+1] )
* 3.表长-1
* 4.返回0
***********************************************/
int delete_seqlist(seqlist_t *L,int pos)
{
	int i=0;
	if( (pos<0) || (pos>L->last) )
	{
		puts("input pos is invalid");
		return -1;
	}
	for(i=pos;i<=get_lengh_seqlist(L);i++)
	{
		L->data[i] = L->data[i+1];
	}
	L->last--;
	return 0;
}

10.查找顺序表中元素

/****************************************
* 查找顺序表中元素
* 1.遍历顺序表找到元素返回即可
* 2. 若无 返回-1
*
****************************************/
int search_seqlist(seqlist_t *L,data_t x)
{
	int i=0;
	for(i=0;i<=L->last;i++)
	{
		if(L->data[i] == x)
		{
			return i;
		}
	}
	return -1;
}

11.修改顺序表中任意位置的值

/*************************************************
* 修改顺序表中任意位置的值
* 1.插入位置小于0 插入位置大于表长 返回-1
* 2.修改值
* 3.返回0
*************************************************/
int change_seqlist(seqlist_t *L,data_t x,int pos)
{
	if( (pos<0) || (pos>L->last) )
	{
		puts("input pos is invalid");
		return -1;
	}	
	L->data[pos] = x;
	return 0;
}

12..显示顺序表

/************************************
* 显示顺序表
* 1.表无效 退出
* 2.遍历 显示
* 3.退出
************************************/
void show_seqlist(seqlist_t *L)
{
	int i=0;
	if(L == NULL)
	{
		puts("seqlist_t *L is NULL");
		return ;
	}
	for(i=0;i<=L->last;i++)
	{
		printf( " L->data[%d] = %dn ",i,L->data[i]);
	}
	return ;
}

最后是将所有函数放在主函数里查看结果

int main()
{
	int i=0;
	int pos;
	seqlist_t *L=NULL; 
	L = create_seqlist();
	for(i=0;i<=8;i++)
	{
		insert_seqlist(L,i,0);
	}
	printf("seqlist_t L lengh = %dn",get_lengh_seqlist(L));
	insert_seqlist(L,50,5);


	pos = search_seqlist(L,50);

	printf("n %d n",pos);
	delete_seqlist(L,5);
	show_seqlist(L);


	clear_seqlist(L);
	
	return 0;
}

后期我会做一个用顺序表做一个电话簿,到时候我们再进一步讨论顺序表。

程序源码:

链接:https://pan.baidu.com/s/1lUnigTQZ8Ek71oYnMoT0yg 
提取码:1456

最后

以上就是自信羽毛为你收集整理的顺序表的实现(全代码)的全部内容,希望文章能够帮你解决顺序表的实现(全代码)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部