数据结构(C语言版)顺序表

线性表及其顺序存储
2.1线性表
线性表是一个线性结构它是一个n>=0各结点的有限序列,对于其中的结点,有且仅有一个开始结点,它没有前驱但有一个后继结点;有且仅有一个终端结点,它没有后继只有前驱;其他结点有且仅有一个 前驱和一个后继结点。
线性表在计算机中的存储基本上是采用顺序存储和链式存储两种方式。
2.2顺序表
线性表采用顺序存储的方式就是顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元。
数据结构的存储结构要体现它的逻辑结构。在顺序表的存储结构中,内存中物理地址相邻的结点一定具有顺序表中的逻辑关系。

与顺序表有关的操作:置空、顺序表后部插入数据、打印、判断是否为空、查找顺序表中值为X的结点、取得顺序表中第i个结点的值、在顺序表position位置插入值为x的结点。删除表中第position位置的结点。
#define MAXSIZE 100
typedef in datatype;
typedef struct{
datatype a[MAXSIZE];
int size;
}
//置空
void init(sequence_list *slt)
{
slt->size=0;
}
//后插
void append(sequence_list *slt,datatype x)
{
if(slt->size==MAXSIZE)
printf("顺序表是满的");exit(1);
slt->a[slt-size]=x;
slt->size=slt->size+1;
}



//打印
void display(sequence_list slt)
{
int i;
if(!slt.size) printf("顺序表为空");
else
for(i=0;i<slt.size;i++) printf("%5d",slt.a[i])
}


//判断顺序表是否为空
int empty(sequence_list slt)
{
return(slt.size==0?1:0);
}
//查找顺序表中值为x的结点
int find(sequence_list slt,datatype x)
{
int i=0;
while(i<slt.size&&slt.a[i]!=x) i++;
return(i<slt.size?i:-1)
}


//取得顺序表中第i个结点的位置
datatype get(sequence_list slt,int i)
{
if(i<0||i>slt.size)
{printf("\n指定位置的结点不存在");exit(1)}
else
return slt.a[i];
}








//顺序表的插入操作 j将需插入位置之后的数据继续后移
void insert(sequence_list *slt,datatype x, int position)
{
int i;
if(slt->size==MAXSIZE)
{printf("\n顺序表是满的!没法插入!");exit(1);}
if(position<0||position>slt->size)
{printf("\n指定的插入位置不存在");exit(1);}
for(i=slt->size;i>position;i--) slt->a[i]=slt->a[i-1];
slt->a[position]=x;
slt->size++;
}
平均移动n/2次 时间复杂度为O(n)

//顺序表的删除操作 删除了之后数据前移一个位置
void dele(sequence_list *slt,int position)
{
int i;
if(slt->size==0)
{printf("顺序表是空的!") ; exit(1);}
if(position<0||position>=slt->size)
{printf("\n指定的删除位置不存在!");exit(1);}
for(i=position;i<slt->size-1;i++) slt->a[i]=slt->a[i+1];
slt->size--;
}
n-1/2 也属于O(n)的时间复杂度

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章