环形队列的转置,不知在哪里出错了?求大神指点迷津!
#include<stdio.h>#include"sqqueue.h"
#include"sqstack.h"
void reverse(sqqueue *&q)//环形队列转置函数
{
elemtype x;
sqstack *ss;//定义一个栈
ss=(sqstack *)malloc(sizeof(sqstack));//给栈动态分配空间
ss->top=-1;//一开始栈为空
for(int i=q->front+1;i<=queuelength(q);i++)
{ x=q->data[i];//把队中元素一一取出来
push(ss,x);//进栈
}
q->front=q->rear=0; //先还原队,也就是空队
int j=q->front+1;//把j指在队列中下标为1的位置,
while(!stackempty(ss))//只要栈不为空,
{
pop(ss,x); //就把栈中的元素出栈一个,放到队中去,出栈一个,放到队中去
q->data[j] = x;
j++;
}
}
void main()
{
elemtype e;
sqqueue *q;
printf("环形队列基本运算如下:\n");
printf(" (1)初始化队列q\n");
initqueue(q);
printf(" (2)依次进队列元素a,b,c,d,e,f\n");
if(!enqueue(q,'a')) printf("\t提示:队满,不能进队\n");
if(!enqueue(q,'b')) printf("\t提示:队满,不能进队\n");
if(!enqueue(q,'c')) printf("\t提示:队满,不能进队\n");
if(!enqueue(q,'d')) printf("\t提示:队满,不能进队\n");
if(!enqueue(q,'e')) printf("\t提示:队满,不能进队\n");
if(!enqueue(q,'f')) printf("\t提示:队满,不能进队\n");
printf(" (3)输出原队列q\n");
dispqueue(q);//输出队列
printf("\n");
q->front=0;//队首重新指向0
reverse(q);//队列转置
printf(" (4)输出转置后的队列q\n");
dispqueue(q);
printf("\n");
}
这个是主函数
#include"sqqueue.h"
void initqueue(sqqueue * &q)//初始化队列
{
q=(sqqueue *)malloc(sizeof(sqqueue));
q->front=q->rear=0;
}
void destroyqueue(sqqueue * &q)//销毁队列
{
free(q);
}
bool queueempty(sqqueue *q)//判断队列是否为空
{
return (q->front==q->rear);
}
int queuelength(sqqueue *q)//求队的长度
{
int i=0;
while(q->front!=q->rear)
{
i++;
q->front=(q->front+1)%maxsize;
}
return(i);
}
bool enqueue(sqqueue * &q,elemtype e)//进队
{
if((q->rear+1)%maxsize==q->front)//判断队满与否
return false;
q->rear=(q->rear+1)%maxsize;//队尾指针先移动
q->data[q->rear]=e;//然后元素入到队尾去
return true;
}
bool dequeue(sqqueue * &q,elemtype &e)//出队
{
if(q->front==q->rear)
return false;
q->front=(q->front+1)%maxsize;//队首指针先移动
e=q->data[q->front];//然后队首元素出队
return true;
}
void dispqueue(sqqueue *q)
{
while(!queueempty(q))
{
q->front=(q->front+1)%maxsize;
printf("%c ", q->data[q->front]);
}
}
这个是队列的基本运算
#include"sqstack.h"
void initstack(sqstack *&s)//初始化栈
{
s = (sqstack *)malloc(sizeof(sqstack));
s->top = -1;
}
void destroystack(sqstack *&s)//销毁栈
{
free(s);
}
bool stackempty(sqstack * s)//判断栈是否为空
{
return (s->top == -1);
}
bool push(sqstack *&s,elemtype e)//进栈
{
if(s->top == maxsize1-1)
return false;
s->top++;
s->data1[s->top] = e;
return true;
}
bool pop(sqstack * &s,elemtype &e)//出栈
{
if(s->top == -1)
return false;
e = s->data1[s->top];
s->top--;
return true;
}
bool gettop(sqstack *s,elemtype &e)//得到栈中的某个元素
{
if(s->top == -1)
return false;
e = s->data1[s->top];
return true;
}
int length(sqstack *s)//求栈的长度
{
int i=0;
while(s->top!=-1)
{
i++;
s->top--;
}
return(i);
}
void dispstack(sqstack *s)//输出栈
{ elemtype e;
while(!stackempty(s))
{
pop(s,e);
printf("%c",e);
}
}
这个是栈的基本运算
#include <stdio.h>
#include <malloc.h>
#define maxsize 100
typedef char elemtype;
typedef struct
{
elemtype data[maxsize];
int front,rear;
}sqqueue;
void initqueue(sqqueue * &q);
void destroyqueue(sqqueue * &q);
bool queueempty(sqqueue *q);
bool enqueue(sqqueue * &q,elemtype e);
bool dequeue(sqqueue * &q,elemtype &e);
void dispqueue(sqqueue *q);
int queuelength(sqqueue *q)
#include<stdio.h>
#include<malloc.h>
#define maxsize1 100
typedef char elemtype;
typedef struct
{
elemtype data1[maxsize1];
int top;
}sqstack;
void initstack(sqstack *&s);
void destroystack(sqstack *&s);
bool stackempty(sqstack *s);
bool push(sqstack *&s,elemtype e);
bool pop(sqstack *&s,elemtype &e);
bool gettop(sqstack *s,elemtype &e);
int length(sqstack *s);
void dispstack(sqstack *s);
这两个是队列和栈的头文件
[ 本帖最后由 计科1102 于 2013-4-27 22:48 编辑 ]