线性表
线性结构是最常用、最简单的一种数据结构。其中的线性表是其中最有代表性的一类数据结构。
具有的特点:
有唯一的“第一个”元素
有唯一的“最后一个”元素
除第一个元素外,每一个元素都有唯一的一个直接前驱
除最后一个元素外,每一个元素都有唯一的一个直接后继
线性表(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";
}