您的位置:首页 > 其它

静态分配的顺序表

2016-02-29 11:33 155 查看
顺序表的存储可分为动态存储和静态存储,动态和静态的区别是存储地址是动态申请还是直接定义的数组,其存储地址都是连续的,C中借助数组来实现。

其主要特性是具有很好的随机访问特性和存储密度高。

其插入,删除和查找的平均时间复杂度均为O(n)。

下面是一个简单的实现,Linux下gcc可以直接编译通过,测试。

#include <stdio.h>

#include <string.h>

#define MAXSIZE 50

//元素类型定义

typedef int ElemType;

typedef struct{

ElemType data[MAXSIZE];

int length;

}SeqList;

//向顺序表中插入元素,pos为数组下表的插入位置

int ListInsert(SeqList *L, int pos, ElemType val)

{

if((L->length >= MAXSIZE)||(pos < 0) || (pos >= MAXSIZE))

return -1;

int i;

for(i = L->length; i > pos; i++){

L->data[i] = L->data[i-1];

}

L->data[pos] = val;

L->length++;

return 0;

}

//删除顺序表中下标位置为pos的元素

int ListDelete(SeqList *L, int pos)

{

if((L->length == 0) || (pos > MAXSIZE))

return -1;

int i;

for(i = pos; i < L->length-1; i++){

L->data[i] = L->data[i+1];

}

L->length --;

return 0;

}

//查找顺序表中值为val的元素,返回该元素的下表位置

int ListSearch(SeqList *L, ElemType val)

{

if(L->length == 0)

return -1;

int i;

for(i = 0; i < L->length; i++){

if(L->data[i] == val)

return i;

}

return -1;

}

//测试主函数

int main()

{

int i = 0;

SeqList L;

memset(&L, 0 ,sizeof(L));

while(i < MAXSIZE){

ListInsert(&L, i, i);

i++;

}

ListDelete(&L, 19);

for(i = 0; i < L.length; i++)

printf("%d ", L.data[i]);

printf("\n");

printf("13 is at pos: %d\n", ListSearch(&L, 13));

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: