数据结构上机——栈
来源:互联网 发布:Win10网络图标显示红叉 编辑:程序博客网 时间:2024/06/08 06:01
#include<stdio.h> #include<stdlib.h> #define ERROR -1#define OK 1typedef char SElemType;typedef int Status;typedef struct LNode{ SElemType data; struct LNode *next;} *SLink;typedef struct{ SLink top; //栈顶指针 int length; //栈中元素个数}LStack;LNode *p;LNode *q;LStack S;void InitStack(LStack &S){ S.top=NULL; S.length = 0;}int gettop(LStack S,char &e){//取栈顶 if(S.length==0) return ERROR; e=(S.top->next->data); return OK;}void push(LStack &S,char e){//进栈 p=(LNode*)malloc(sizeof(LNode)); if(!p) exit(1); p->data=e; p->next=S.top; S.top=p; ++S.length;}bool Pop(LStack &S,char &e){//出栈 if(!S.top) return false; else{ e=S.top->data; S.top=S.top->next; --S.length; return true; }} int main(){ InitStack(S); char e='a'; for(int i=0;i<5;i++){ push(S,e);//字符进栈 e++; } if(gettop(S,e)==1) printf("%c ",e); puts(""); while(Pop(S,e)){ printf("%c ",e); } return 0;}
#include<stdio.h> #include<stdlib.h> typedef char SElemType;typedef int Status;#define STACK_INIT_SIZE 100//栈存储空间的初始分配量#define STACKINCREMENT 10// 栈存储空间的分配增量int OK=1,OVERFLOW=-1,ERROR=-1;typedef struct{ SElemType *base;//栈空间基址称为栈底指针,指向栈底位 SElemType *top; //栈顶指针,约定栈顶指针指向栈顶元素的 下(后面)一个位置 int stacksize; //当前分配的栈空间大小(以sizeof(SElemType)为单位)}SqStack;// SqStack::结构类型名Status InitStack_Sq(SqStack &S) { S.base=(SElemType * )malloc((STACK_INIT_SIZE)*sizeof(SElemType)); if (! S. base) exit(OVERFLOW); //存储分配失败 S.top=S.base; S.stacksize=STACK_INIT_SIZE; return OK; }Status GetTop(SqStack S, SElemType &e) { // 若栈不空,则用e返回S的栈顶元素,并返回OK; //否则返回ERROR if (S.top==S.base) return ERROR; //若栈为空 e = * (S.top-1); return OK;}//GetTop_SqStatus Push(SqStack &S, SElemType e) { //将元素e插入栈成为新的栈顶元素,要考虑上溢情况 if (S.top-S.base>=S.stacksize) { //栈满,追加存储空间 S.base= (SElemType*)realloc(S.base,(S.stacksize +STACKINCREMENT)*sizeof(SElemType)); if (! S. base) exit(OVERFLOW); //存储分配失败 S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top++=e; //元素e 插入栈顶,修改栈顶指针 return OK; }//PushStatus Pop(SqStack &S, SElemType &e) { //若栈不空,则删除S的栈顶元素,用e 返回其值并返回OK //否则返回ERROR if (S.top== S.base) return ERROR; //栈空,返回ERROR e = * --S.top; //删除栈顶元素,用e 返回其值,并修改栈顶指针 return OK;} //Popint main(){ SqStack S; char c; printf("%d ",InitStack_Sq(S)); puts(""); char e='a'; for(int i=0;i<5;i++){ Push(S,e);//字符进栈 e++; } if(GetTop(S,e)==1) printf("%c ",e); puts(""); while(Pop(S,e)==1){ printf("%c ",e); } return 0;}
#include<stdio.h> #include<stdlib.h> #define ERROR -1#define OK 1typedef char SElemType;typedef int Status;typedef struct LNode{ SElemType data; struct LNode *next;} *SLink;typedef struct{ SLink top; //栈顶指针 int length; //栈中元素个数}LStack;LNode *p;LNode *q;LStack S,R;char e;void InitStack(LStack &S){ S.top=NULL; S.length = 0;}int gettop(LStack S,char &e){//取栈顶 if(S.length==0) return ERROR; e=(S.top->next->data); return OK;}void push(LStack &S,char e){//进栈 p=(LNode*)malloc(sizeof(LNode)); if(!p) exit(1); p->data=e; p->next=S.top; S.top=p; ++S.length;}bool Pop(LStack &S,char &e){//出栈 if(!S.top) return false; else{ e=S.top->data; S.top=S.top->next; --S.length; return true; }} void Enqueue(LStack &S){ e='a'; for(int i=0;i<5;i++){ push(S,e);//模拟入队列 printf("%c ",e); e++; }}void dequeue(LStack &S,LStack &R){ if(R.top) { Pop(R,e);//栈R不为空,直接出队列 } else{ while(S.length!=0){ Pop(S,e); push(R,e);//栈S元素全部进R } Pop(R,e); } printf("%c ",e);}int main(){ InitStack(S); InitStack(R); puts("依次进队5个:"); Enqueue(S); puts(""); puts("出队一个:") ; dequeue(S,R); puts("") ; puts("再出队一个哈哈:") ; dequeue(S,R); return 0;}
阅读全文
0 0
- 数据结构上机——栈
- 数据结构上机——队列
- 数据结构上机——数组
- 数据结构上机作业3:栈——八皇后
- 数据结构上机1——线性表
- 数据结构上机2——链表
- 数据结构上机——KMP算法
- 数据结构上机——二叉树
- 数据结构上机——图(第一次)
- 数据结构上机实验3——N皇后问题栈求解
- 字符串插入块链实现——数据结构上机实验
- 数据结构上机实验五——01背包问题
- 数据结构上机3——循环链表
- 数据结构上机——哈夫曼树 线索二叉树
- 数据结构上机实验任务——迷宫求解问题
- 数据结构上机实践第二周项目3——体验复杂度
- 数据结构上机实践第二周项目3——体验复杂度
- 数据结构上机时间第三周项目4(1)—顺序表应用
- VS2013中Image Watch插件的使用(OpenCV)
- 注意 @DateTimeFormat 和@JsonFormat 使用场景的不同
- MySQL 5.6 for Windows 解压缩版配置安装
- html基础
- Android 5.x新增控件之-RecylcerView实现ListView/GridView
- 数据结构上机——栈
- 关键字:strictfp
- 关于js校验,检验常见的比如:电话,数字,邮箱,手机号等等
- JQuery 对 Select option 的操作
- Android组合开发
- 日常笔记
- 【SE】这也许是最完美的项目文档框架-Siemens
- 长短连接学习笔记
- Python log() 函数