1、顺序队的基本操作实现代码:
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 10
typedef int ElemType;
/****
*队 ----对头出队,队尾入队(一段插入,另一端删除)
**/
//定义顺序队的结构
typedef struct{
ElemType data[MaxSize] ;
int front,rear; //队头指针和队尾指针
}SqQueue;
//初始化
void InitQueue(SqQueue &Q){
Q.front=Q.rear=0;
}
//判队空--牺牲一个单元来区分队空队满
bool isEmpty(SqQueue Q){
if(Q.front==Q.rear){
return true;
}else{
return false;
}
}
//入队(循环队列)
bool EnQueue(SqQueue &Q,ElemType value){
//判队满
if((Q.rear+1)%MaxSize==Q.front){
printf("队满!\n");
return false;
}
Q.data[Q.rear]=value;
Q.rear=(Q.rear+1)%MaxSize;//队尾指针加1取模
return true;
}
//出队(循环队列)
bool DeQueue(SqQueue &Q,ElemType value) {
if(Q.front==Q.rear){
return false;
}
value=Q.data[Q.front];
Q.front=(Q.front+1)%MaxSize;//队头指针加1取模
return true;
}
//求队列长度
int QueueLength(SqQueue Q){
return (Q.rear+MaxSize-Q.front)%MaxSize;
}
//取队头元素
ElemType GetHead(SqQueue Q) {
if(Q.front==Q.rear){
return false;
}
return Q.data[Q.front];
}
int main(){
SqQueue Q;
InitQueue(Q);
ElemType value;
EnQueue(Q,1);
EnQueue(Q,2);
printf("队列的长度为:%d\n",QueueLength(Q));
printf("队头元素为:%d\n",GetHead(Q));
DeQueue(Q,value);
printf("队列的长度为:%d\n",QueueLength(Q));
}
2、链队的基本操作实现代码:
/*带头结点链队的实现*/
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct LinkNode{
ElemType data;
struct LinkNode *next;
}LinkNode;
typedef struct{
LinkNode *front,*rear;
}LinkQueue;
//初始化
void InitQueue(LinkQueue &Q){
Q.front=Q.rear=(LinkNode *)malloc(sizeof(LinkNode)) ; //建立头节点
Q.front->next=NULL; //初始化为空
}
//判空
bool isEmpty(LinkQueue Q){
if(Q.front=Q.rear){
return true;
}else{
return false;
}
}
//入队
bool EnQueue(LinkQueue &Q,ElemType value){
LinkNode *newNode=(LinkNode *)malloc(sizeof(LinkNode));
newNode->data=value;
newNode->next=NULL;
Q.rear->next=newNode;
Q.rear=newNode;
return true;
}
//出队
bool DeQueue(LinkQueue &Q,ElemType &value){
if(Q.front=Q.rear){
return false;
}
LinkNode *delNode=Q.front->next;
value=delNode->data;
Q.front->next=delNode->next;
if(Q.rear==delNode){
Q.rear=Q.front;//若队列中只有一个结点,删除后变空
}
free(delNode) ;
return true;
}
//获取队头元素
ElemType GetHead(LinkQueue Q) {
if(Q.front==Q.rear){
return false;
}
LinkNode *p=Q.front->next;
return p->data;
}
int main(){
LinkQueue Q;
InitQueue (Q);
ElemType value;
EnQueue(Q,1);
printf("队头元素为:%d\n",GetHead(Q));
DeQueue(Q,value);
printf("队头元素为:%d\n",GetHead(Q));
}