实现基于C/C++的数据结构的顺序循环队列,此程序未经过严格实验,只是提供大概思路
#include<stdio.h>
#include<stdlib.h>#define MAXSIZE 10
typedef int DataType;
typedef struct {
DataType data[MAXSIZE];
int front,rear;
}SeqQueue,*PSeqQueue;
PSeqQueue init_SeqQueue()
{
PSeqQueue q;
q=(PSeqQueue)malloc(sizeof(SeqQueue));
if(q)
{
q->front=0;
q->rear=0;
}
return q;
}
void destroy_SeqQueue(PSeqQueue q)
{
if(q)
free(q);
q=NULL;
}
int isEmpty_SeqQueue(PSeqQueue q)
{
if(q && q->front==q->rear)
return 1;
else
return 0;
}
int in_SeqQueue(PSeqQueue q,DataType x)
{
if((q->rear+1)%MAXSIZE==q->front)
{
printf("the queue is full");
return -1;
}
else
{
q->rear=(q->rear+1)%MAXSIZE;
q->data[q->rear]=x;
return 1;
}
}
int out_SeqQueue(PSeqQueue q,DataType *x)
{
if(isEmpty_SeqQueue(q))
{
printf("the queue is empty");
return -1;
}
else
{
q->front=(q->front+1)%MAXSIZE;
*x=q->data[q->front];
return 1;
}
}
int getFront_SeqQueue(PSeqQueue q,DataType *x)
{
if(isEmpty_SeqQueue(q))
{
printf("the queue is empty");
return -1;
}
else
{
*x=q->data[(q->front+1)%MAXSIZE];
return 1;
}
}
int main()
{
return 0;
}
实现基于C/C++的数据结构的链式队列,此程序未经过严格实验,只是提供大概思路
#include<stdio.h>
#include<stdlib.h>
typedef int DataType;
typedef struct node{
DataType data;
struct node *next;
}QNode,*PQNode;
typedef struct {
PQNode front,rear;
}LinkQueue,*PLinkQueue;
PLinkQueue init_LinkQueue(PLinkQueue q)
{
PLinkQueue q=(PLinkQueue)malloc(sizeof(LinkQueue));
if(q)
{
q->front=NULL;
q->rear=NULL;
}
return q;
}
void destroy_LinkQueue(PLinkQueue q)
{
PQNode p;
if(q)
{
while(q->front)
{
p=q->front;
q->front=q->front->next;
free(p);
}
free(q);
}
q=NULL;
}
int isEmpty_LinkQueue(PLinkQueue q)
{
if(q && q->front==NULL &&q->rear=NULL)
return 1;
else
return 0
}
int in_PLinkQueue(PLinkQueue q,DataType x;)
{
PQNode p;
p=(PQNode)malloc(sizeof(QNode));
if(!p)
{
printf("memory out");
return -1;
}
p->data=x;
p->next=NULL;
if(isEmpty_LinkQueue(q))
q->front=q->rear=p;
else
{
p->next=q->rear;
q->rear=p;
}
return 1;
}
int out_LinkQueue(PLinkQueue q,DataType *x;)
{
PQNode p;
if(isEmpty_LinkQueue(q))
{
printf("the queue is empty");
return -1;
}
*x=q->front->data;
p=q->front;
q->front=q->front->next;
free(p);
if(q->front==NULL)
q->rear=NULL;
return 1;
}
int getFront_LinkQueue(PLinkQueue q,DataType *x;)
{
if(isEmpty_LinkQueue(q))
{
printf("the queue is empty");
return -1;
}
*x=q->front->data;
return 1;
}
int main()
{
return 0;
}