数据结构总结(2.1线性表)

线性表

线性结构是最常用、最简单的一种数据结构。其中的线性表是其中最有代表性的一类数据结构。

具有的特点:

有唯一的“第一个”元素

有唯一的“最后一个”元素

除第一个元素外,每一个元素都有唯一的一个直接前驱

除最后一个元素外,每一个元素都有唯一的一个直接后继

线性表(linear list)是由n(n>=0)个数据元素(element)构成的有限序列,其中该序列中的每一个element都具相同的数据类型(int、float、char等等),其中的数据个数即为长度,也可以说数组

其中注意的是a1是线性表的第一个结点,an为线性表的最后一个结点

a1到an中a1到an-1都是an的前驱,其中的an-1是an的直接前驱

同理

得到直接后继为an+1

 

线性表中的节点可以为单值元素也可以数一类数据域所构成的数据项,所以,可以得出节点是实际数据的最小单位,而不是最小元素。

线性表具有数据结构的一系列特点:可以增加和缩短起长度(space)。可以访问、插入、删除一系列的数据操作。

线性表的c/c++描述:

c:

#define maxseqsize 100

struct seqlist

{

int data[maxseqsize];

int size;

}

void setlitst(seqlist *l)//构造新的线性表

int listsize(const seqlist*l)//求长

int listempty(const seqlist*l)//判空

int getdata(const seqlist*l,int id);//取值

void insertrear(seqlist*l,int item);//尾插,将元素插入到尾元素之后

void erase(seqlist*l,int id);//定点删除

void seqerror(const char *c);//线性表出错的显示功能函数

void setlist(seqlist *l)

{

l->size=0;

return 1;

}

int listsize(const seqlist*l)

{

int c;

c=l->size;

return c;

}

int listempty(const seqlist *l)

{

if(l->size==0)

printf("the seqlist is empty);

}

int getdata(const seqlist*l,int id)

{

if(id<0||id>l->size-1)

seqerror("id out of range!");

return(l->data[id]);

void insertrear(seqlist*l,int item)

{

if(l->size==maxseqsize)

seqerror("seqlist full!");

l->data[l->size]=item;

l->size++;

}

void erase(seqlist *l,int id)

{

if(l-size==0)

seqerror("an empty list!");

if(id<0||id>l-size-1)
seqerror("id out of range!");

for(int i=id+1;i<l->size;i++)

l->data[i-i]=data[i];

l-size--;

}

void seqerror(const char *c)

{

printf("%s",c);

}

#include<stdio.h>

void main(void)

{

seqlist l;

setlist(&l);

insertrear(&l,21)

insertrear(&l,15)

erase(&l,0);

int n=listsize(&l);

for(i=0;i<n;i++)

printf("%c/t",getdata(&l,i);

}

c++(部分函数就不给出实现方法了与c大同小异):

 

const int MaxSeqSize=l00;
class SeqList struct SeqList
{
int data[MaxSeqSize];
int size;
void Error(char c)const{cout<<c};
exit(1);
}
public:
SeqList(void)
{
size=0;
}
int Size(void)const{return(size);}
bool Empty(void)const{return(size==0);};
const Type&GetData(int id)const;
void InsertRear(const Type&item);
void Erase(int id);
}
const Type&SeqList::GetData(int Type GetData(const SeqList l,int id)
const
{
if(id<0||id>size-1)
error("id out of range!");
return(data[id]);
}
void seqlist::insertrear(const int&item)
{
if(size==maxsegsize)
error("seqlist full!");
data[size]=item;
size++;
}
void seqlist::erase(int id)
{
if(size==0)
error("an emptylist!");
if(id<0||id>size-1)
error("id of out range!");
for(int i=id+1;j<size;i++)
data[i-1]=data[i];
size-;
}
#include<iostream.h>
void main(void)
{
seqlist l;
l.insertrear(21);
l.insertrear(11);
l.erase(0);
int n=l.size();
for(i=0;j<n;i++)
cout<<l.getdata(i)<<"|t";
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值