(一)结构体定义一个顺序队列
typedef struct
{char data[maxsize];
int rear ,front;
}sqQueue;
(二)队列的初始化
头尾两个指针指向0
void InitQueue(sqQueue *s)
{
(*s).rear=(*s).front=0;
}
(三)进队操作
注意循环队列的使用
int EnQueue(sqQueue *Q,char x)//入队
{
if(((*Q).rear+1)%maxsize==(*Q).front)
return 0;
(*Q).data[(*Q).rear]=x;
(*Q).rear=((*Q).rear+1)%maxsize;
return 1;
}
(四)出队操作
int DeQueue(sqQueue*Q,char*x)//出队
{if((*Q).rear==(*Q).front)
return 0;
else
*x=(*Q).data[(*Q).front];
(*Q).front=((*Q).front-1)%maxsize;
}
(五)队列中元素的遍历
int DeQueue(sqQueue*Q,char*x)//出队
{if((*Q).rear==(*Q).front)
return 0;
else
*x=(*Q).data[(*Q).front];
(*Q).front=((*Q).front-1)%maxsize;
}
(六)具体实现
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define maxsize 100
typedef struct
{char data[maxsize];
int rear ,front;
}sqQueue;
void InitQueue(sqQueue *s)
{
(*s).rear=(*s).front=0;
}
int EnQueue(sqQueue *Q,char x)//入队
{
if(((*Q).rear+1)%maxsize==(*Q).front)
return 0;
(*Q).data[(*Q).rear]=x;
(*Q).rear=((*Q).rear+1)%maxsize;
return 1;
}
int DeQueue(sqQueue*Q,char*x)//出队
{if((*Q).rear==(*Q).front)
return 0;
else
*x=(*Q).data[(*Q).front];
(*Q).front=((*Q).front-1)%maxsize;
}
void printQueue(sqQueue Q)
{if(Q.front ==Q.data )
return ;
else
{int i=0;
int a=(Q.rear -Q.front +maxsize)%maxsize ;
for(i=0;i<a;i++)
{printf("%c",Q.data[i]);
}
}
}
int main(int argc, char *argv[]) {
sqQueue Q;
InitQueue(&Q);
char str[100];
gets(str);
int i, a=strlen(str);
for(i=0;i<a;i++)
{EnQueue( &Q,str[i]);
}
printQueue(Q);
return 0;
}