06

严蔚敏视频 笔记06

其它形式的链表

 

1.双向链表

typedef struct DuLNode {

    ElemType data; // 数据域

    struct DuLNode *prior; // 指向前驱的指针域

    struct DuLNode *next; // 指向后继的指针域

} DuLNode, *DuLinkList;

 

空表头结点前驱和后继指向其自身

 

2.循环链表

最后一个结点的指针又指回头结点

 

2.4 一元多项式表示

用线性表来表示P=(p0,p1,,pn)

当有很多0时不适合用来表示

 

pi是指数为ei的项的非零系数

((p1,e1),(p2,e2),…,(pm,em))

 

ADT Polynomial {

    数据对象:D={ai|aiTermSet,i=1,2,m m>=0

                 TermSet中的每个元素包含一个表示系数的实数和表示指数的整数}

    数据关系:R1={<ai-1,ai>|ai-1,aiD,ai-1中的指数值<ai中的指数值,i=2,,n}

    基本操作:

    ……

}

 

实现:

typedef struct { // 项的表示,多项式的项

                 // 作为LinkList的数据元素

    float coef; // 系数

    int expn; // 指数

} term,ElemType;

// 两个类型名:term用于本ADTElemTypeLinkList

 

数据对象名

 

typedef LinkList polynomial;

// 用带表头结点的有序链表表示多项式

 

int cmp(term a,term b);

判定函数

 

void CreatPolyn(polynomial &P,int m);

// 输入m项的系数和指数,建立表示一元多项式的有序链表P

 

本章小结:

1.了解逻辑结构特性 线性关系

两种不同映象方法

顺序表 链表

2.熟练掌握两类结构的描述方法及各种基本操作实现

3.从时间和空间复杂度角度综合比较不同特点及适用场合

 

第三章 栈和队列

 

3.1 栈的类型定义

 

ADT Stack {

    数据对象:D={ai|aiElemSet,i=1,2,n n>=0}

    数据关系:R1={<ai-1,ai>|ai-1,aiD,i=2,,n

              约定an端为栈顶,ai端为栈底}

    基本操作:

    InitStack(&S)

    DestroyStack(&s)

    StackEmpty(S)

    StackLength(S)

    GetTop(S,&e)

    ClearStack(&S)

    Push(&S,e)

    Pop(&S,&e)

}

 

特殊线性表:

 

插入 只能在ListLength(L)+1位置

删除 只能在ListLength(L)位置

 

队列

插入 只能在ListLength(L)+1位置

删除 只能在1位置

 

3.2栈的应用举例

数制转换

括号匹配的检验

行编辑器程序问题

迷宫求解

表达式求值

实现递归

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值