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

数据结构_数据结构与算法04

2013-10-09 12:29 190 查看
数据结构04:

线性表操作:

Listelete(&L,i,&e)的实现

我们要考虑 删除线性表中的元素 线性表的结构发生变化没有。

问:删除元素时,线性表的逻辑结构发生什么变化。

考虑最坏的情况。

考虑平局情况:

ListDelete:(思想)

1、判断删除的位置是否合法。

2、p为被删除元素的位置

3、删除元素的值赋给e

4、表尾元素的位置

5、被删除元素之和的元素左移

//先理解思想,后面的代码可以用多种语言去实现这个思路。

//每种语言有它的特色,java 面向对象,C 面向过程

//以下是伪代码:

Status ListDelete Sq(SqList &L,int pos,ElemType &e)

{

if((pos<1)||(pos>L.length)){return ERROR;}//删除位置不合法

p=&(L.elem[pos-1]);//p为被删除元素的位置

e=*p; //删除元素的值赋给e

q=L.elem+L.length-1; //表尾元素的位置

for(++p;p<=q;++p){

*(p-1)=*p;//被删除元素之和的元素左移

}

--L.length; //表长度减一

return OK;

}//ListDelete_Sq

//此算法的时间复杂度为 O(ListLength())

以元素(数据元素的映像)+

指针(指示后继元素存储位置的)=结点(表示数据元素)

以“结点的序列”表示线性表------称作链表

数据域+指针域

单链表

Typedef struct LNode{

ElemType data;//数据域

struct Lnode *next;//指针域

}//LNode ,*LinkList

线性表的操作GetElem(l,i,&e)

在链表中的实现。

基本操作位:使指针p始终指向线性表中第j个数据元素

GetElem

//初始化,p指向第一个节点,j为技数器

//赋指针向查找,自到p指向第pos个元素或p为空

//第pos个元素不存在

//取第pos个元素

Status GetElem L(LinkList L,int pos,ElemType &e){

p=L->next;j=1;

while(p&&j<pos){p=p->next;++j}//赋指针向后查找,直到p指向第pos个元素或p为空

if(!p||j>pos){

return ERROR;//第pos个元素不存在

}

e=p->data; //取第pos个元素

return OK;

}//GetElem_1

ListInsert:

//寻找第pos-1个节点

//pos小于1或者大于表长

//生成新节点

//插入L中

status ListInsert L(LinkList L,int pos,ElemType e){

p=L;j=0;

while(p&&j<pos-1){//寻找第pos-1个节点

p=p->next;++j;

}

if(!p||j>pos-1){

return ERROR;//pos小于1或者大于表长

}

s=(LinkList)malloc (sizeof(LNode));//生成新节点

s->data=e;s->next=p-next;//插入L中

p->next=s;

return OK;

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