c/c++實現順序循環隊列和鏈式隊列

實現基於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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章