您的位置:首页 > 其它

队列基本操作

2015-10-02 15:29 495 查看
//链式队列

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

typedef struct node{
int data;
struct node *pNext;
}Node,* pNode;

typedef struct queue
{
pNode front;
pNode rear;
}Queue, * pQueue;

void InitQueue(pQueue q);
void EnQueue(pQueue q,int val);
void QueueTraverse(pQueue q);
bool DeQueue(pQueue q);
int main(void)
{
Queue myq;
InitQueue(&myq);
EnQueue(&myq,1);
EnQueue(&myq,21);
EnQueue(&myq,321);
QueueTraverse(&myq);
DeQueue(&myq);
QueueTraverse(&myq);
return 0;
}

void InitQueue(pQueue q)
{
q->rear= (pNode)malloc(sizeof(Node));
if(NULL == q->rear)
{
printf("动态分配内存失败,程序退出\n");
exit(-1);
}
q->front=q->rear;
q->rear->pNext=NULL;
}

void EnQueue(pQueue q,int val)
{
pNode pNew = (pNode)malloc(sizeof(Node));
if(NULL == pNew)
{
exit(-1);
}
pNew->data=val;
pNew->pNext=NULL;
q->rear->pNext = pNew;
q->rear=pNew;
}

void QueueTraverse(pQueue q)
{
pNode pTemp = q->front->pNext;
while(pTemp != NULL)
{
printf("%d  ",pTemp->data);
pTemp = pTemp->pNext;
}
printf("\n");
}

bool is_empty(pQueue q)
{
if(q->front==q->rear)
return true;
else
return false;
}
bool DeQueue(pQueue q)//返回true 出队成功;否则失败
{
if(is_empty(q))
{
return false;
}
else
{
pNode pTemp = q->front->pNext;
q->front->pNext = pTemp->pNext;//q->front=pTemp->pNext
free(pTemp);
pTemp=NULL;
return true;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: