概述
先给大家看看我们将会编写的函数,不喜勿喷,在有些细节方面,可以自行修改。程序完整代码我放在最后,大家可以自行下载
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
最后
以上就是自信羽毛为你收集整理的顺序表的实现(全代码)的全部内容,希望文章能够帮你解决顺序表的实现(全代码)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复