数据结构二
来源:互联网 发布:央行4040mlf知乎 编辑:程序博客网 时间:2024/05/29 07:59
#include<stdio.h>#include<malloc.h>#define ERROR 0#define OK 1#define STACK_INT_SIZE 10 /*存储空间初始分配量*/#define STACKINCREMENT 5 /*存储空间分配增量*/typedef int ElemType; /*定义元素的类型*/typedef struct{ ElemType *base; ElemType *top; int stacksize; /*当前已分配的存储空间*/}SqStack;int InitStack(SqStack *S); /*构造空栈*/int push(SqStack *S,ElemType e); /*入栈*/int Pop(SqStack *S,ElemType *e); /*出栈*/int CreateStack(SqStack *S); /*创建栈*/void PrintStack(SqStack *S); /*出栈并输出栈中元素*/int InitStack(SqStack *S){ S->base=(ElemType *)malloc(STACK_INT_SIZE *sizeof(ElemType)); if(!S->base) return ERROR; S->top=S->base; S->stacksize=STACK_INT_SIZE; return OK;}/*InitStack*/int Push(SqStack *S,ElemType e){ if((S->top)-(S->base)==S->stacksize) { S->base=(ElemType *)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(ElemType)); if(S->base==NULL) return 0; S->top=S->base+S->stacksize; S->stacksize=S->stacksize+STACKINCREMENT; } *S->top=e; S->top++; return 0;}/*Push*/int Pop(SqStack *S,ElemType *e){ if(S->top==S->base) return 0; else { S->top--; *e=*S->top; return 1; }}/*Pop*/int CreateStack(SqStack *S){ int e; if(InitStack(S)) printf("Init Success!\n"); else{ printf("Init Fail!\n"); return ERROR; } printf("input data:(Terminated by inputing a character)\n"); while(scanf("%d",&e)) Push(S,e); return OK;}/*CreateStack*/void PrintStack(SqStack *S){ ElemType e; while(Pop(S,&e)) printf("%3d",e);}/*Pop_and_Print*/int main(){ SqStack ss; printf("\n1-createStack\n"); CreateStack(&ss); printf("\n2-Pop&Print\n"); PrintStack(&ss); return 0;}
算法分析:输入元素序列1 2 3 4 5,为什么输出序列为5 4 3 2 1?体现了栈的什么特性?
先进后出
#include<stdio.h>#include<malloc.h>#define ERROR 0#define OK 1#define STACK_INT_SIZE 10 /*存储空间初始分配量*/#define STACKINCREMENT 5 /*存储空间分配增量*/typedef int ElemType; /*定义元素的类型*/typedef struct{ ElemType *base; ElemType *top; int stacksize; /*当前已分配的存储空间*/}SqStack;int InitStack(SqStack *S); /*构造空栈*/int push(SqStack *S,ElemType e); /*入栈*/int Pop(SqStack *S,ElemType *e); /*出栈*/int CreateStack(SqStack *S); /*创建栈*/void PrintStack(SqStack *S); /*出栈并输出栈中元素*/int InitStack(SqStack *S){ S->base=(ElemType *)malloc(STACK_INT_SIZE *sizeof(ElemType)); if(!S->base) return ERROR; S->top=S->base; S->stacksize=STACK_INT_SIZE; return OK;}/*InitStack*/int Push(SqStack *S,ElemType e){ if((S->top)-(S->base)==S->stacksize) { S->base=(ElemType *)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(ElemType)); if(S->base==NULL) return 0; S->top=S->base+S->stacksize; S->stacksize=S->stacksize+STACKINCREMENT; } *S->top=e; S->top++; return 0;}/*Push*/int Pop(SqStack *S,ElemType *e){ if(S->top==S->base) return 0; else { S->top--; *e=*S->top; return 1; }}/*Pop*/int CreateStack(SqStack *S){ int e; if(InitStack(S)) printf("Init Success!\n"); else{ printf("Init Fail!\n"); return ERROR; } printf("input data:(Terminated by inputing a character)\n"); while(scanf("%d",&e)) Push(S,e); return OK;}/*CreateStack*/void PrintStack(SqStack *S){ ElemType e; while(Pop(S,&e)) printf("%3d",e);}/*Pop_and_Print*/int IsEmpty(SqStack *S){ if(S->top==S->base) return 1; else return 0;}void Conversion(int N){ SqStack S; int x; InitStack(&S); while(N>0) { x=N%2; Push(&S,x); N/=2; } while(!IsEmpty(&S)) { Pop(&S,&x); printf("%d", x); }}int main(){ SqStack ss; int n; scanf("%d",&n); Conversion(n); return 0;}
‘(‘match’)’!
‘(‘not match’)’!
判断括号是否匹配
阅读全文
0 0
- 数据结构[二]
- 数据结构(二)
- 二:数据结构
- 数据结构二
- 数据结构(二)
- 二 JavaScript基本数据结构
- 二、数据结构与数据库
- 数据结构基础-队列(二)
- 数据结构--二路归并
- 数据结构之二
- 数据结构学习连载(二)
- linux VFS数据结构(二)
- 数据结构学习笔记二
- 数据结构复习题(二)
- 重温数据结构二(算法)
- 数据结构笔记二(20120819)
- 数据结构笔记二(20120825)
- 数据结构初识二
- 系统可打开最大文件数过小,导致CHECK_NRPE: Error
- $http.post提交示例
- (05)Structs初学笔记——默认Action
- $scope.$watch
- 树莓派3B安装opencv3.3.1
- 数据结构二
- ESP8266 AP服务器设置
- solr命令
- 【备忘】年薪50万2017年最新北风网Spark2.0从入门到精通教程
- 关于Coding的一些思考
- redis的使用
- ios 打包遇到symbols tool failed的问题解决
- 网页字体配色总结
- Android使用自定义字体