数据结构——线性表(一):顺序表的实现

什么是线性表

线性表就是零个或多个相同元素的有限序列
一个长度为n(n>=0)的线性表可以表示为:
L=(a0,a1,……ai-1,ai,ai+1……an
序列:元素和元素之间有着前后之分。其中ai+1 称作ai的后继,ai-1称作ai的前驱。
有限:线性表的长度必须是有限长的(计算机所能处理的数据必须是有限的)。
相同元素:简单来说表中的元素的数据类型必须是一致的。
零个:表中可以没有元素,即表是空表的情况下,表也是存在的。

线性表的分类

根据存储方式的不同,可以分为顺序表链表
顺序表:将线性表中的元素按照顺序存储的方式存储于一片连续的存储空间中。(采用数组的形式实现)
链表:线性表采用链式存储结构的方式存储。(可分为单链表、双链表、循环链表等)

线性表的特点

(1)线性表的表头无前驱(非空表);
(2)线性表的表尾,无后继;
(3)除了表头和表尾,其它每个元素只有一个直接前驱和一个直接后继。


顺序表


顺序表的基本运算及实现

数据定义

   #define MAXLEN 100 //采用宏定义设置表的长度 
   typedef  int data_ty;  // 对表中元素数据类型进行重命名,便于复用
   typedef struct sequence_list
   {
   
   	data_ty data[MAXLEN];
   	int tail;  //存放当前表中最后一个元素的位置
   }seqlist, *seqlist_p;

(1)建立一个空表

目的为了开辟一段表的存储空间,此时表为空,因此表中最后一个元素位置设为-1;

bool seqlist_create(seqlist_p *p)
{
   
   if (NULL == ((*p) = (seqlist_p)malloc(sizeof(seqlist))))
   {
   
   	puts("malloc failed");
   	return false;
   }

   (*p)->tail = -1; //规定当尾部元素位置为-1,即表为空
   return true;
}

(2)清空一个表

这里仅仅是抛弃表中的元素,相当于恢复到空表(表依然存在)

void seqlist_clear(seqlist_p p)
{
   
	p->tail = -1;
}

(3)判断表是否为空

当表尾元素的位置等于-1,即为空表

bool seqlist_empty(seqlist_p p)
{
   
   if (p->tail == -1)
   	return true;
   return false;
}

(4)判断表是否满

当表尾元素的位置等于表的长度减一,即为满表

bool seqlist_full(seqlist_p p)
{
   
 if (p->tail == MAXLEN - 1)
 	return true;
 return false;
}

(5)取出表中的某个元素

这里的位置pos与存放表的数组的下标等价

bool seqlist_out_pos(seqlist_p p,int pos,data_ty *D)
{
   
	if (pos < 0 || pos > p->tail)
	{
   
		puts("position invaild");
		*D = -1;
		return false;
	}

	*D = p->data[pos];

	return true;
}

(6)确定某元素位置

int seqlist_find(seqlist_p p,data_ty da)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值