[Data structures]Stack
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 1024
typedef struct _SqStack{
int *base;
int *top;
int stackSize;
}SqStack;
int InitStack(SqStack *S)
{
S->base = (int *)malloc(MAX*sizeof(int));
S->top = S->base;
S->stackSize = MAX;
return 1;
}
int GetTop(SqStack *S, int *e)
{
if(S->top == S->base){
return 0;
}else{
*e = *(S->top - 1);
return 1;
}
}
int Push(SqStack *S, int e)
{
if(S->top - S->base >= S->stackSize){
return 0;
}
*(S->top++) = e;
}
int Pop(SqStack *S, int *e)
{
if(S->top == S->base){
return 0;
}else{
*e = *(--S->top);
return 1;
}
}
int StackEmpty(SqStack *S)
{
if(S->top == S->base){
return 1;
}else{
return 0;
}
}
int ClearStack(SqStack *S)
{
S->top = S->base;
return 1;
}
int PrintStack(SqStack *S)
{
int *p = S->base;
while(p != S->top){
printf("%c", (char)*p);
p++;
}
printf("\n");
return 1;
}
void Conversion()
{
SqStack S;
int N;
InitStack(&S);
scanf(" %d", &N);
printf("Decimal:%d, \nOctonary:", N);
while(N){
Push(&S, N%8);
N /= 8;
}
while(!StackEmpty(&S)){
Pop(&S, &N);
printf("%d", N);
}
printf("\n");
}
void Brackets()
{
SqStack S;
char str[MAX];
int i=-1;
int t;
InitStack(&S);
scanf(" %s", str);
printf("Input:%s, \nMatching result:", str);
while(str[++i] != 0){
GetTop(&S, &t);
if(str[i] == '(' || str[i] == '['){
Push(&S, (int)str[i]);
}else if(str[i] == ')'){
if((char)t != '('){
printf("Not match:%d\n", i);
return;
}else{
Pop(&S, &t);
}
}else if(str[i] == ']'){
if((char)t != '['){
printf("Not match:%d\n", i);
return;
}else{
Pop(&S, &t);
}
}
}
printf("Match ok.\n");
return;
}
void LineEdit()
{
SqStack S;
char ch;
int t;
getchar();//Delete last '\n'
InitStack(&S);
while((ch = getchar()) != '$'){
if(ch != '\n'){
switch(ch){
case '#':
Pop(&S, &t);
break;
case '@':
ClearStack(&S);
break;
default:
Push(&S, (int)ch);
break;
}
}else{
PrintStack(&S);
ClearStack(&S);
}
}
}
void main()
{
printf("log.anycle.com\n\n");
printf("Conversion:\n");
Conversion();
printf("\n");
printf("Brackets matching:\n");
Brackets();
printf("\n");
printf("Line edit:\n");
LineEdit();
printf("\n");
}
日历
最新微语
- 有的时候,会站在分叉路口,不知道向左还是右
2023-12-26 15:34
- 繁花乱开,鸟雀逐风。心自宁静,纷扰不闻。
2023-03-14 09:56
- 对于不可控的事,我们保持乐观,对于可控的事情,我们保持谨慎。
2023-02-09 11:03
- 小时候,
暑假意味着无忧无虑地玩很长一段时间,
节假意味着好吃好喝还有很多长期不见的小朋友来玩...
长大后,
这是女儿第一个暑假,
一个半月...
2022-07-11 08:54
- Watching the autumn leaves falling as you grow older together
2018-10-25 09:45
分类
最新评论
- Goonog
i get it now :) - 萧
@Fluzak:The web host... - Fluzak
Nice blog here! Also... - Albertarive
In my opinion you co... - ChesterHep
What does it plan? - ChesterHep
No, opposite. - mojoheadz
Everything is OK!... - Josephmaigh
I just want to say t... - ChesterHep
What good topic - AnthonyBub
Certainly, never it ...
发表评论: