#include <stdio.h>
#include <stdlib.h>
//自己实现栈--当时数据结构期末考试机式的一道题!!!!
typedef struct remedy
{
int a[100];
int top;
}sqstack;
int main()
{
int n,i,count=0,m;
sqstack s;
s.top=-1;
int c[100],b[100];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&b[i]);
scanf("%d",&m);
for(i=0;i<m;i++)
scanf("%d",&c[i]);
for(i=0;i<m;i++)
{
if(c[i]==1)
{
s.top++;
s.a[s.top]=b[count];
count++;
}
else if(c[i]==0)
{
if(s.top==-1)
return 0;
printf("%d\n",s.a[s.top]);
s.top--;
}
}
return 0;
}
栈的顺序存储结构
:二进制转换成十进制
#define STACKSIZE 20
#include<math.h>
typedef struct
{
char *base;
char *top;
int stacksize;
}sqstack;
void initstack(sqstack *s)
{
s->base=(char *)malloc(STACKSIZE*sizeof(char));
if(!s->base)
exit(0);
s->top=s->base;
s->stacksize=STACKSIZE;
}
void push(sqstack *s,char e)
{
if(s->top-s->base>=s->stacksize)
{
s->base=(char* )realloc(s->base,(s->stacksize+STACKSIZE)*sizeof(char));
if(!s->base) exit(0);
}
*(s->top)=e;
s->top++;
}
void pop(sqstack *s,char *e)
{
if(s->top==s->base) exit(0);
s->top--;
*e=*(s->top);
}
int stacklen(sqstack *s)
{
return (s->top -s->base);
}
int main()
{
char c;
sqstack s;
int len,i,sum=0;
initstack(&s);
scanf("%c",&c);
while(c!='#')
{
push(&s,c);
scanf("%c",&c);
}
getchar();
len=stacklen(&s);
printf("%d\n",len);
for(i=0;i<len;i++)
{
pop(&s,&c);
sum=sum+(c-48)*pow(2,i);
}
printf("%d",sum);
return 0;
}
二进制转八进制:
#define STACKSIZE 20
#include<math.h>
typedef struct
{
char *base;
char *top;
int stacksize;
}sqstack;
void initstack(sqstack *s)
{
s->base=(char *)malloc(STACKSIZE*sizeof(char));
if(!s->base)
exit(0);
s->top=s->base;
s->stacksize=STACKSIZE;
}
void push(sqstack *s,char e)
{
if(s->top-s->base>=s->stacksize)
{
s->base=(char* )realloc(s->base,(s->stacksize+STACKSIZE)*sizeof(char));
if(!s->base) exit(0);
}
*(s->top)=e;
s->top++;
}
void push_1(sqstack *s,int e)
{
if(s->top-s->base>=s->stacksize)
{
s->base=(char* )realloc(s->base,(s->stacksize+STACKSIZE)*sizeof(char));
if(!s->base) exit(0);
}
*(s->top)=e;
s->top++;
}
void pop(sqstack *s,char *e)
{
if(s->top==s->base) exit(0);
s->top--;
*e=*(s->top);
}
int stacklen(sqstack *s)
{
return (s->top -s->base);
}
int main()
{
char c;
sqstack s;
sqstack t;
int len,len_1,i,j;
int sum;
initstack(&s);
initstack(&t);
scanf("%c",&c);
while(c!='#')
{
push(&s,c);
scanf("%c",&c);
}
getchar();
len=stacklen(&s);
printf("%d\n",len);
sum=0;
for(i=0;i<len/3;i++)
{
sum=0;
for(j=0;j<3;j++)
{
pop(&s,&c);
sum=sum+(c-48)*pow(2,j);
}
push_1(&t,sum);
}
printf("%d\n",sum);
len=len%3;
sum=0;
for(i=0;i<len;i++)
{
pop(&s,&c);
sum=sum+(c-48)*pow(2,i);
}
if(sum!=0)
push(&t,sum);
printf("%d\n",sum);
len_1=stacklen(&t);
printf("%d\n",len_1);
for(i=0;i<len_1;i++)
{
pop(&t,&c);
printf("%d",c);////问题待解决!!!!为什么c明明是字符型,为啥%d结果却是对的。
}
return 0;
}
一般情况下我们都是使用栈的顺序结构
栈的链式结构做了解即可