本文共 3523 字,大约阅读时间需要 11 分钟。
#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 ; }
#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/