算法学习之旅,初级篇(20)--队列的实现

介绍

使用c语言实现队列。

分析

       队列功能有初始化,入队,出对,判断是否为空,队列长度,队头队尾元素获得。

代码

#include
#include
typedef int QElemType;
#define OK 1
#define ERROR 0
typedef struct QNode
{
QElemType data;
struct QNode *next;
}QNode,*QueuePtr;


typedef struct
{
QueuePtr front;
QueuePtr rear;
int size;
}LinkQueue;
//初始化
int  InitQueue(LinkQueue &Q)
{
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
if(!Q.front)
exit(-1);
Q.front->next=NULL;
Q.size=0;
return OK; 
}
//把元素e入队
int EnQueue(LinkQueue &Q,QElemType &e)
{
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
if(!p) exit(0);
p->next=NULL;
p->data=e;
Q.rear->next=p;
Q.rear=p;
Q.size++;
return OK;
}
//队头元素出队
int Dequeue(LinkQueue &Q)
{
if(Q.front==Q.rear)
return ERROR;
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
p=Q.front->next;
Q.front->next=p->next;
Q.size--;
if(Q.rear==p)
Q.rear=Q.front;
free(p);
return OK;
}
//判断队列是否为空
int IsEmpty(LinkQueue &p)
{
if(p.front==NULL&&p.rear==NULL&&p.size==0)
return 1;
else
return 0;
}
//返回队列大小
int GetSize(LinkQueue &p)
{
return p.size;
}
//返回队头元素
QElemType GetFront(LinkQueue &p)
{
if(IsEmpty(p)!=1)
{
int a=p.front->data;
return p.front->next->data;


}
else
return -1;
}
//返回队尾元素
QElemType GeRear(LinkQueue &p)
{
if(IsEmpty(p)!=1)
{
return p.rear->next->data;


}
else
return -1;
}
int main()
{
LinkQueue link;
InitQueue(link);
for(int i=0;i<10;i++)
EnQueue(link,i);
printf("%d\n",GetSize(link));
for(int i=0;i<10;i++)
{
printf("%d ",GetSize(link));
printf("%d\n",GetFront(link));
Dequeue(link);
}
system("pause");
return 0;
}

遇到的问题

头尾节点的里面的data是没有数据的。 

你可能感兴趣的:(C数据结构)