堆栈学习笔记
来源:互联网 发布:杭州淘宝客服真实工资 编辑:程序博客网 时间:2024/06/06 02:32
顺序栈的表示和实现
#include <iostream>using namespace std;#define MAXSIZE 100#define another 50typedef struct{ int *base; int *top; int stacksize;}SqStack;//顺序栈的初始化void InitStack(SqStack &S){ S.base=new int[MAXSIZE]; S.top=S.base; S.stacksize=MAXSIZE;}//入栈void Push(SqStack &S,int e){ if(S.top-S.base>=S.stacksize) { S.base=(int *)realloc((S.base,(another+S.stacksize)*sizeof(int)); /*realloc(void *__ptr, newsize):更改已经配置的内存空间,即更改由malloc()函数分配的内存空间的大小。 参数ptr为原有的空间地址,newsize是重新申请的地址长度.*/ S.top=S.base+S.stacksize; S.stacksize+=another; } *S.top++=e;}//出栈int Pop(SqSatck &S,int &e){ if(S.base==S.top) return false; else return e=*--S.top;}//取栈顶元素int GetTop(SqStack S){ if(S.base==S.top) return false; else return *(S.top-1);}//判断是否为空bool IsEmpty(SqStack &S){ if(S.top==S.base) return true; return false;}int main(){ return 0;}
链栈的实现与表示
#include <iostream>#include <stdio.h>#include <malloc.h>using namespace std;typedef struct StackNode{ int data; struct stackNode *next;}StackNode,*LinkStack;//顺序栈的初始化LinkStack CreateStack(){ StackNode S; S=(LinkStack)malloc(sizeof(StackNode)); S->next=NULL; return S;}//判断是否为空int IsEmpty(LinkStack S){ return (S->next==NULL);}//入栈void Push(LinkStack &S,int &e){ /*将元素item压入堆栈S*/ Linkstack TmpCell; TmpCell=(LinkStack)malloc(sizeof(StackNode)); TmpCell->data=e; Tmpcell->next=S->next; S->next=TmpCell;}//出栈int Pop(LinkStack &S,int &e ){ /*删除并返回堆栈S的栈顶元素*/ LinkStack FirstCell; int tope; if(IsEmpty(S)) { printf("堆栈空"); return NULL; }else{ FirstCell=S->next; S->next=FirstCelll; tope=FirstCell->data; delete(FirstCell); return tope; }}//取栈顶元素int GetTop(LinkStack S){ if(S->next) return S->next->data;}int main(){ return 0;}
循环队列的顺序表示及实现???写得有些乱了,还需重新整理
#include <iostream>using namespace std;#define MAXQSIZE 100typedef struct{ int *base; int front;//队伍中第一个元素的前一个位置 int rear;//实际上最后一个元素的位置}SqQueue,*Queue;//循环队列的初始化void InitQueue(SqQueue &Q){ Q.base=new int[MAXQSIZE]; Q.front=Q.rear=0;//头指针和尾指针置零,队列为空}//求队列的长度int QueueLength(SqQueue Q){ return (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;}//循环队列的入队void AddQ(SqQueue &Q,int e){ if((Q.rear+1)%MAXQSIZE==Q.front)//队满 return ; Q.rear=(Q.rear+1)%MAXQSIZE; Q.base[Q.rear]=e;}//循环队列的出队int DeleteQ(SqQueue &Q){ if(Q.front==Q.rear)//队列为空 return false; Q.front=(Q.front+1)%MAXQSIZE; return Q.base[Q.front];}int main(){}
运算符优先级
例如,‘+’‘+’:左边的‘+’比右边的‘+’优先级大。
1.后缀表达式求值策略:
从左向右“扫描”,逐个处理运算数和运算符号。
2.如果将ABCD四个字符按顺序压入堆栈,是不是ABCD的所有排列都可能是出栈的序列?可以产生CADB这样的序列吗?
如果有三个字符ABC出入栈时,全排列有3!=6种可能。其中的CAB是没法生成的。
因为先输出C,需要C进栈再出栈,而要求按照ABC这样的顺序进栈,所以C出栈时AB必然还在栈里,而且A还压在B下面。 其他五种排列都会生成。
如果有四个字符ABCD出入栈时,排列有4!=24种可能。 不是所有排列都有可能时出栈的序列,像CADB这样的序列是产生不了的。
四个字符出栈的所有可能序列有几种?(14种)????(待解决。。。现在有些疲惫,比较清醒的时再来思考)
阅读全文
0 0
- 堆栈学习笔记
- 堆栈 学习笔记
- 堆栈学习笔记
- ARM的堆栈学习笔记
- 关于堆栈的学习笔记
- ARM的堆栈学习笔记
- 数据结构学习笔记之堆栈
- 数据结构学习笔记2-堆栈
- 【C语言学习笔记】--堆栈
- c语言学习笔记-堆栈1
- OpenSSL学习笔记——堆栈
- activity的任务堆栈学习笔记二
- JAVA学习笔记(一)堆栈
- lua学习笔记之详解lua堆栈
- 学习笔记--数据结构(之一)堆栈
- C++ STL--stack堆栈容器学习笔记
- uC/OS-II 学习笔记:任务堆栈
- python数据结构学习笔记-4-堆栈 队列
- C++面向对象模型初探
- 「树莓派玩转物联网」之树莓派简介
- 在线转二维码小工具
- sql增删改查语句
- HDU5119 Happy Matt Friends (dp && 0-1背包)
- 堆栈学习笔记
- 实验三 Linux文件管理
- Docker入门系列(三):让你的应用变为可扩展的服务
- <C++>shared_ptrs利用std::enable_shared_from_this()实现安全管理this指针
- matlab灰度直方图的2种绘制方法
- 在Eclipse中使用JUnit4进行单元测试
- linux 手工释放内存 高内存 内存回收 方法思路
- php 错误级别日志
- 数组