第三章 栈和队列-1.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第三章 栈和队列-1

顺序栈 共享栈 出栈运算:从S所指的栈中删除一个值结点。 方法:当栈非空时,先修改栈顶指针,将其值减1; 特别说明:删除就是将栈顶指针位置下移一个位置,原来的栈顶元素就被认为不包括在栈中。实际上,该结点仍然占据原来位置,当有新结点进栈时会将其覆盖掉 DataType Pop (SeqStack *S) { // 若栈不空,则删除S的栈顶元素, // 否则返回空 if (StackEmpty(S)) { printf ( “Stack Underflow”); return NULL; } else return S-data [S-top--]; } DataType GetTop (SeqStack *S) { // 若栈不空,则取栈顶元素, // 否则返回空 if (StackEmpty(S)) { printf ( “Stack is Empty”); return NULL; } else return S-data [S-top]; } x y top1 top2 栈1 栈2 共享栈的定义: #define MaxSize 200; typedef int Datatype; typedef struct { DataType data[MaxSize]; int top1,top2; }DSeqStack; 置空栈 Void InitStack (SeqStack *S, int i) { // 将共享栈置为空栈,i表示栈号 if (i==1) S-top1 = -1; else S-top2 =MaxSize; } 判栈满 int DStackFull (DSeqStack *S) { // 判断共享栈是否为空 ,若栈满则返回1,否则返回0; if (S-top1 + 1= =S-top2) return 1; return 0; } 栈顶指针 链栈 ∧ a1 an 注意: 链栈中指针的方向 an-1 栈底元素 链栈的类型说明: typedef struct node { DataType data; Struct node *next; }StackNode; typedef struct { StackNode *top; //栈顶指针 }LinkStack; 初始化栈: void InitStack ( LinkStack *S) { S-top=NULL; } 判栈空: int StackEmpty ( LinkStack *S) { return S-top==NULL; } 进栈: void Push ( LinkStack *S, DataType x) { //先申请结点空间,然后通过修改指针将结点插入 StackNode *p= (StackNode *) malloc (sizeof (StackNode)); p-data=x; p-next=S-top; S-top=p; } 出栈: void Push ( LinkStack *S) { //直接修改栈顶指针,删除结点 DataType x; StackNode *p=S-top; if (StackEmpty(S)) { printf(“Stack Underflow”); return NULL; } else { x=p-data; //保存栈顶结点的数据 S-top=p-next; //栈顶指针指向下一个结点 free(p); return x; } } 取栈顶结点: void Push ( LinkStack *S) { //当S所指的栈非空时,取出栈顶结点 if (StackEmpty(S))

文档评论(0)

skvdnd51 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档