1.创建一个顺序栈,并写出出栈和入栈算法2.创建一个循环(顺序)队列,并写出出队和入队算法。求解答

 我来答
草原上之狼
高粉答主

2019-09-30 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2.9万
采纳率:93%
帮助的人:3904万
展开全部
这是我用链表结构实现的栈,以下是算法,顺序表部分没写,最近没什么时间,不好意思啦。。
#include<stdio.h>
#include<stdlib.h> //包括malloc()和realloc()函数的头文件
#include<math.h> //包括pow()函数的头文件
#define Max_stack_size 20
#define Addersize 10
typedef char Elemtype;
typedef struct{
Elemtype *base;
Elemtype *top;
int stacksize;
}sqStack;

void initStack (sqStack *s){ //初始化一个空栈
s->base=(Elemtype *)malloc(Max_stack_size*sizeof(Elemtype));
if(!s->base) exit(0);
s->top=s->base;
s->stacksize=Max_stack_size;
}

void pushStack(sqStack *s,Elemtype e){ //入栈操作
if(s->top-s->base>=s->stacksize)
{s->base=(Elemtype *)realloc(s->base,(s->stacksize+Addersize)*sizeof(Elemtype));
if(!s->base) exit(0);
s->top=s->base+s->stacksize;
s->stacksize=s->stacksize+Addersize;}
*(s->top)=e;
s->top++;
}

void popStack(sqStack *s,Elemtype *e){ //出栈操作
if(s->top==s->base) return;
*e=*--(s->top);
}

void clearStack(sqStack *s) //清空栈
{
s->top=s->base;
}

void destroyStack(sqStack *s){ //销毁栈
int i;
int len;
len=s->stacksize;
for(i=0;i<len;i++)
{free(s->base);
s->base++;
}
s->base=NULL;
s->top=s->base;
s->stacksize=0;
}

int counterStack(sqStack s)
{return (s.top-s.base);}

void main()
{ sqStack p;
Elemtype c;
int i,sum,length;
sum=0;
printf("initial:\n");
initStack(&p);
printf("push the 8 scale:\n");
scanf("%c",&c); //输入数据时不能隔开,否则答案错误,空格也算字符
while(c!='#')
{pushStack(&p,c);
scanf("%c",&c);
}getchar();
length=counterStack(p); //有错时更容易检测到。。
printf("numbers'length:%d\n",length);
for(i=0;i<length;i++)
{popStack(&p,&c);
{sum=sum+(c-48)*pow(8,i);} //二进制pow(8,i)改为pow(2,i),十六进制用if else如/**/中所示
}
/* if('0'<c<'9') {sum=sum+(c-48)*pow(16,i);}
else if('A'<c<'Z') {sum=sum+(c-55)*pow(16,i);}
else if('a'<c<'z') {sum=sum+(c-87)*pow(16,i);}*/
printf("the answer is:%d\n",sum);
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式