//链式队列
#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;
}
}
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交