数据结构_数据结构与算法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
线性表操作:
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
相关文章推荐
- linux设备驱动第三版笔记---->linux驱动重要数据结构之struct file
- 数据结构全攻略--学好数据结构的必经之路
- 《数据结构》第五章 树和二叉树学习指南
- 并发编程 — 并发数据结构--转载
- 【数据结构】哈夫曼树
- 《大话数据结构》笔记(1)--数据结构绪论,算法
- 数据结构--无序List
- 数据结构小知识点汇总。(待累积)
- 软考(1)——看图心想数据结构
- 数据结构-链队列
- 2015年大二上-数据结构-链表(7)-多项式求和
- 【OVS2.5.0源码分析】ofpbuf数据结构分析
- JAVA数据结构——堆
- 1.Index Mapping (or Trivial Hashing) with negatives allowed[数据结构]
- 数据结构-双向链表
- 软考——数据结构总结
- Python笔记——基本数据结构:列表、元组及字典
- 数据结构例程——最小生成树的克鲁斯卡尔算法
- 数据结构--线性表
- 几种常见的数据结构的操作性能对比图