數據結構(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)的時間複雜度

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