西安交大朱站立《数据结构——使用C语言》头文件系列——顺序队列
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本顺序队列工程包含2个头文件(StackCode.h、Queue.h)和一个源文件(Queue.cpp),本处对之前系列之二的堆栈的头文件做了小小的修改,以便完全对应书中内容。依然是存为word以便使用
头文件1 StackCode.h
typedef struct
{
DataType stack[MaxStackSize];
int top;
}SeqStack;
void StackInitiate(SeqStack *S)//初始化顺序堆栈
{
S->top=0;
}
int StackNotEmpty(SeqStack S)//判断堆栈是否为空
{/*为空返回0,非空返回1*/
if(S.top<=0) return 0;
else return 1;
}
int StackPush(SeqStack *S,DataType x)//入栈
{
if (S->top>=MaxStackSize)
{
printf("堆栈已满无法插入!\n");
return 0;
}
else
{
S->stack[S->top]=x;
S->top++;
return 1;
}
}
int StackPop(SeqStack *S,DataType *d)//出栈
{
if(S->top<=0)
{
printf("堆栈已空无法弹出!\n");
return 0;
}
else
{
S->top--;
*d=S->stack[S->top];
return 1;
}
}
int StackTop(SeqStack S,DataType *d)//取栈顶元素{
if (S.top<=0)
{
printf("堆栈已空!\n");
return 0;
}
else
{
*d=S.stack[S.top-1];
return 1;
}
}
头文件2 Queue.h
//定义结点结构体
typedef struct qnode
{
DataType queue[MaxQueueSize];
int rear; /*队尾指针*/
int front; //队头指针
int count; //计数器
}SeqCQueue;//顺序队列
void QueueInitiate(SeqCQueue *Q) //初始化{
Q->rear=0; //定义初始队尾指针下标值Q->front=0; //定义初始队头指针下标值Q->count=0; //定义书初始计数器值
}
int QueueNotEmpty(SeqCQueue Q)
{//判断是否非空,空返回0,非空返回1
if(Q.count!=0) return 1;
else return 0;
}
int QueueAppend(SeqCQueue *Q,DataType x)
{//将x插入队尾,成功返回1,失败返回0
if(Q->count>0 && Q->rear==Q->front)//判断队列是否满了{
printf("队列已满无法插入!\n");
return 0;
}
else
{
Q->queue[Q->rear]=x;
Q->rear=(Q->rear+1) % MaxQueueSize;
Q->count++;
return 1;
}
}
int QueueDelete(SeqCQueue *Q,DataType *d)
{
if(Q->count==0)
{
printf("队列已空无法出列!\n");
return 0;
}
else
{
*d=Q->queue[Q->front];
Q->front=(Q->front+1) % MaxQueueSize;
Q->count--;
return 1;
}
}
int QueueGet(SeqCQueue Q,DataType *d)
{
if(Q.count==0)
{
printf("队列已空无数据可取!\n");
return 0;
}
else
{
*d=Q.queue[Q.front];
return 1;
}
}
测试主函数Queue.cpp
#include
#include
#define MaxQueueSize 100
#define MaxStackSize 100
typedef char DataType;//定义具体应用的数据类型
#include "Queue.h"
#include "StackCode.h"
void HuiWen(char str[])
{//判断是否回文的函数
SeqCQueue myQueue;
SeqStack myStack;
char x,y;
int i,length;
length=strlen(str);
QueueInitiate(&myQueue);
StackInitiate(&myStack);
for(i=0;i { QueueAppend(&myQueue,str[i]); StackPush(&myStack,str[i]); } while (QueueNotEmpty(myQueue)==1 && StackNotEmpty(myStack) == 1) { if(QueueDelete(&myQueue,&x)==1 && StackPop(&myStack,&y)==1 && x!=y) { printf("%s不是回文!\n",str); return; } } if(QueueNotEmpty(myQueue) || StackNotEmpty(myStack)) printf("%s不是回文!\n",str); else printf("%s是回文!\n",str); }