您的位置:首页 > 理论基础 > 数据结构算法

数据结构与算法学习(一)

2015-05-11 16:36 369 查看
线性表的OPeration:

InitList(*L):初始化操作,创建一个为L的空的线性表;

ListEempty(L):判断L是否为空表,若线性表为空,则返回ture,否则返回false;

ClearList(*L):将线性表清空;

GetElem(L,i,*e):将线性表L中第i个位置元素值返回给e;

LocateElem(L,e):在线性表L中查找与给定值e相等的元素,若查找成功,返回元素在L中的序号表示成功,否则,返回0表示失败;

ListInsert(*L,i,e):在线性表L中第i个位置插入元素值e;

ListDetele(*L,i,*e):在线性表L中删除第i个位置元素,并用e返回其值;

Listlength(L):返回线性表L中的元素个数;

union.c//将A=AUB,将B中元素合并到A中代码段:

void unionL(List *La, List Lb)

{int La_len, Lb_len, i;

Elemtype e;//相同元素e

La_len=ListLength(*La);

Lb_len=ListLength(Lb);

for(i=1;i<=Lb_len;i++);

{GetElem(Lb,i,&e);

if(!LocateElem(La,e))

{LiseInsert(La,La_len++,e);

}

}

线性表的顺序存储结构:开辟初始地址,在连续地址中依次存放元素值。

#define MAXSIZE 20

typedef int Elemtype

typedef struct

{Elemtype data[MAXSIZE];

int length //线性表当前长度

}SqList;

顺序存储结构三个属性:(1)存储空间的起始位置,数组data;(2)数组的长度MAXSIZE;(3)线性表的当前长度length.

getElem.c//将线性表L中第i个位置元素值返回。

#define OK 1

#define Error 0

#define ture 1

#define false 0

typedef int Status

// Status是函数的类型,其值是函数结果的状态代码,如OK等

//初始条件,顺序线性表L已存在,1<=i<=ListLength(L)

//操作结果,用e返回线性表L中第i个元素的值

Status GetElem(SqList L,int i,Elemtype *e)

{if(L.length==0||i<1||i>L.length)

return ERROR

*e=data[i-1];

return 0K;

}

线性表插入算法:

Status ListInsert(SqList *L,int i,Elemtype e)

{int k;

if(L->length>MAXSIZE)

{return ERROR;}

if(i<1||i>L->length+1)

{return ERROR;}

if(i<L->length)

{//要将插入元素后的数据向后移动

for(k=L->length-1;k>i-1;k--)

{L->data[k+1]=L->data[k];}

}

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

L->length++;

return OK;

}

线性表删除算法:

Status ListDetele(SqList *L,int i,Elemtype *e)

{int k;

if(L->length==0)

{return ERROR;}

if(i<1||i>L->length)

{return ERROR;}

if(1<=i<L->length)//应该用for循环

{for(k=i;k<L->length;k++){L->data[i-1]=L->data[i];}}

L->length--;

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

return OK;}

线性表插入和删除操作的时间复杂度分析:

最坏情况,在第一个元素进行插入和删除操作,每个元素都要移动,时间复杂度为o(n);

最好情况,在最后一个元素进行插入和删除操作,不需要移动其他元素,时间复杂度为o(1);

平均情况,o(n-1/2)=o(0);

综上,顺序线性表的存取操作时间复杂度都为o(1),插入和删除操作都为o(n);

线性表顺序存储结构:

优点:无需为表示表中元素的逻辑关系而增加额外存储空间;可以快速存取表中任意位置元素

缺点:插入或删除操作需要移动大量的元素;当线性表长度变化较大时,难以确定存储空间的容量;容易造成存储空间的碎片
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: