- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
栈(stack)队列(queue)
栈 ( Stack )
队列 ( Queue )
;
3.1栈(stack)
3.1.1栈的定义和操作
1.定义和术语
▲ 栈----限定在表尾作插入、删除操作的线性表。
(a1,a2, ,...,an) ←插入元素(进栈)
↑ ↑ ↘删除元素(出栈)
表头 表尾
(栈底) (栈顶) ;▲ 进栈----插入一个元素到栈中。或:入栈、推入、压入、push。
▲ 出栈----从栈删除一个元素。或:退栈、上托、弹出、pop。
▲ 栈顶----表中允许插入、删除元素的一端(表尾)。
▲ 栈顶元素----处在栈顶位置的元素。
▲ 栈底----表中不允许插入、删除元素的一端。
▲ 空栈----不含元素的栈。;▲ 栈的元素的进出原则: “后进先出”,“Last In First Out”。
▲ 栈的别名: “后进先出”表、“LIFO”表、反转存储器、地窖。;2.模拟铁路调度站
讨论:假设A,B,C三节车厢依次进入调度站中,请问有多少种不同输出?;(1)输入A,B,C,产生输出A,B,C的过程:;(2)输入A,B,C,产生输出C,B,A的过程:;(3)输入A,B,C,产生输出B,C,A的过程:; 当A,B,C依次进栈,C出栈后,由于栈顶元素是B,栈底
元素是A,而A不能先于B出栈,所以不能在输出序列中, 使A
成为C的直接后继, 即不可能由输入A,B,C产生输出C,A,B。
一般地,输入序列(...,ai,...,aj,...,ak,...)到
栈中,不能得到输出序列(...,ak,...,ai,...,aj,...)。;
讨论:
如果依次进栈的元素有A,B,C,D四个,
,又可以得到多少种输出?
如果有n个输入元素呢?
(1) A,B,C,D (7) B,A,C,D (13) C,A,B,D (19) D,B,C,A
(2) A,B,D,C (8) B,A,D,C (14) C,A,D,B (20) D,B,A,C
(3) A,C,B,D (9) B,C,A,D (15) C,B,A,D (21) D,C,B,A
(4) A,C,D,B (10) B,C,D,A (16) C,B,D,A (22) D,C,A,B
(5) A,D,B,C (11) B,D,A,C (17) C,D,A,B (23) D,A,B,C
(6) A,D,C,B (12) B,D,C,A (18) C,D,B,A (24) D,A,C,B
共5+5+3+1=14种 ;3.1.2 栈的存储表示和操作实现;2.顺序栈的描述,进栈、出栈算法
a) 栈的初始化
typedef struct //定义结构体
{
char stack[max];
int top;
}qstype;
?
void initiateqs(qstype *s) //初始化
{
s-top=-1;
}
?
; b) 进栈算法
int push(qstype *s,int x) //进栈
{
if(s-top=max-1) //栈满则结束
return(0);
else
{
s-top++; //将x进栈
s-stack[s-top]=x;
return(1);
}
};c) 出栈算法
int pop(qstype *s) //出栈
{
if(s-top0) //栈空
return(0);
else
{
s-top--; //出栈
return(s-stack[s-top+1]);
}
}
;3.链式栈----使用不带表头结点的单链表
(1)结点和指针的定义
struct node
{ ElemType data; //data为抽象元素类型
struct node *next; //next为指针类型
} *top=NULL; //初始化,置top为空栈
(2)非空链式栈的一般形式;(3)链式栈的进栈算法://压入元素e到top为顶指针的链式栈
struct node *push_link(struct node *top,Elemtype e)
{ struct node *p;
int leng=sizeof(struct node); //确定新结点空间的大小
p=(struct node *)malloc(leng);//生成新
文档评论(0)