博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构基础——栈
阅读量:3936 次
发布时间:2019-05-23

本文共 3523 字,大约阅读时间需要 11 分钟。

栈的基本操作

一、进制转换

二、括号匹配

三、行编辑

Stack_Head.h
#include 
#include
#define STACKINCREAMENT 10#define STACK_INIT_SIZE 100#define OK 1#define ERROR 0typedef int status;typedef char SElemtype;typedef struct{
SElemtype *base; SElemtype *top; status stacksize;}sqstack;/* *初始化栈 */status Init(sqstack *S){
S->base = (SElemtype *)malloc(STACK_INIT_SIZE * sizeof(SElemtype)); if (!S->base) exit(0); S->top = S->base; S->stacksize = STACK_INIT_SIZE; return OK;}/* *获取栈顶元素 */status Gettop(sqstack *S, SElemtype e){
if (S->top == S->base) return ERROR; e = *(S->top - 1); return OK;}/* *压栈 */status push(sqstack *S, SElemtype e){
if (S->top - S->base >= S->stacksize) {
S->base = (SElemtype *)realloc(S->base, (S->stacksize + STACKINCREAMENT) * sizeof(SElemtype)); if (!S->base) exit(0); S->top = S->base + S->stacksize; S->stacksize += STACKINCREAMENT; } *S->top++ = e; return OK;}/* *出栈 */status pop(sqstack *S, int *e){
if (S->top == S->base) return ERROR; S->top--; *e = *(S->top); //*e = *--s->top; return OK;}/* *判断是否为空栈 */status stackempty(sqstack *S){
if (S->top == S->base) return OK; return ERROR;}/* *清空栈 */status clearstack(sqstack *S){
if (S->top == S->base) return ERROR; S->top = S->base; return OK;}/* *销毁栈 */ int DestoryStack(sqstack *S) {
S->top = S->base; free(S->base); S->top = NULL; S->base = NULL; return OK; } /* *进制转换 */void Stack_Conversion(int num,int b){
int temp,a; sqstack S; Init(&S); while (num!=0) {
temp = num%b; push(&S,temp); num=num/b; } while (S.base!=S.top) {
printf("%d",pop1(&S)); } }/* *括号匹配 */status Parenthesis_match(sqstack *S, char *str){
int i = 0, flag = 0; int e; while (str[i] != '\0') {
switch (str[i]) {
case '{': push(S, str[i]); break; case '(': push(S, str[i]); break; case '[': push(S, str[i]); break; case ')': {
pop(S, &e); if (e != '(') flag = 1; } break; case '}': {
pop(S, &e); if (e != '{') flag = 1; } break; case ']': {
pop(S, &e); if (e != '[') flag = 1; } break; default: break; } if (flag) /*判断是否遇到不可解的情况*/ break; i++; } if (!flag && stackempty(S)) printf("括号匹配成功!\n"); else printf("括号匹配失败!\n"); return OK;} /* *行编辑 */void LineEdit(sqstack *S) {
char *p,ch;int c; Init(S); ch = getchar(); while(ch != EOF) {
while(ch!=EOF&&ch!='\n') {
switch(ch) {
case '#':pop(S,&c);break; case '@':clearstack(S);break; default:push(S,ch);break; } ch = getchar(); } p = S->base; while(p!=S->top) {
printf("%c",*p); ++p; } clearstack(S); if(ch!=EOF) ch = getchar(); } return ; }

main.c

#include"Stack_Head.h"int main(){
//char str[100]; sqstack S1,S2; /*Init(&S1); printf("请输入字符串:\n"); scanf("%s", str); Parenthesis_match(&S1, str);*/ printf("请输入数据 '#'表示删除一个元素, '@'表示删除行:\n"); Init(&S2); LineEdit(&S1); return 0;}
运行结果:

括号匹配

行编辑

转载地址:http://owywi.baihongyu.com/

你可能感兴趣的文章
Python面向对象(二)
查看>>
Java语言基础(一)
查看>>
java语言基础(二)
查看>>
Java 数组
查看>>
Java面向对象(一)
查看>>
Java面向对象(二)
查看>>
Python 正则表达式(基础)
查看>>
Python 正则表达式(常用函数)
查看>>
Python 正则表达式(分组)
查看>>
python 文本解析 XML基础
查看>>
Python XML的解析与创建
查看>>
Python 创建XML
查看>>
Python JSON 解析
查看>>
Python Excel解析
查看>>
Python 多进程 fork()详解
查看>>
Python 多进程 multiprocessing.Pool类详解
查看>>
Python 多线程 threading和multiprocessing模块
查看>>
Python 线程同步与互斥
查看>>
Codeforces Round #400 (Div. 1 + Div. 2, combined)D - The Door Problem(2-sat)
查看>>
IDEA中Struts2文件上传时404错误The origin server did not find a current representation for the target resour
查看>>