您的位置:首页 > 理论基础 > 数据结构算法

数据结构之队列(链式队列)

2014-03-14 08:47 399 查看
# include <stdio.h>
# include <stdlib.h>

typedef struct Node
{
int val;
struct Node * pNext;
}NODE, * PNODE;

typedef struct Queue
{
PNODE front;
PNODE rear;
}QUEUE,* PQUEUE;

void init(PQUEUE);
void in(PQUEUE,int);
bool out(PQUEUE,int *);
bool empty(PQUEUE);
void traverse(PQUEUE);

int main()
{
QUEUE q;
int val;

init(&q);

in(&q,1);
in(&q,2);
in(&q,3);
in(&q,4);
in(&q,5);
in(&q,6);
in(&q,7);
in(&q,8);
in(&q,9);

traverse(&q);

if (out(&q,&val))
{
printf("出队的数据为:%d\n",val);
}

if (out(&q,&val))
{
printf("出队的数据为:%d\n",val);
}

if (out(&q,&val))
{
printf("出队的数据为:%d\n",val);
}

if (out(&q,&val))
{
printf("出队的数据为:%d\n",val);
}

if (out(&q,&val))
{
printf("出队的数据为:%d\n",val);
}

traverse(&q);

return 0;
}

void init(PQUEUE pQ)
{
pQ->front=(PNODE)malloc(sizeof(NODE));
pQ->front->pNext=NULL;
pQ->rear=pQ->front;
}

void in(PQUEUE pQ,int val)
{
PNODE pNew=(PNODE)malloc(sizeof(NODE));
pNew->pNext=pQ->rear;
pQ->rear->val=val;
pQ->rear=pNew;
}

void traverse(PQUEUE pQ)
{
PNODE p=pQ->rear->pNext;
while(NULL!=p)
{
printf("%d ",p->val);
p=p->pNext;
}
printf("\n");
}

bool empty(PQUEUE pQ)
{
if (pQ->rear==pQ->front)
return true;
return false;
}

bool out(PQUEUE pQ,int * pVal)
{
PNODE p=pQ->rear;
if (empty(pQ))
return false;
else
{
while(p!=pQ->front)
{
if (p->pNext==pQ->front)	//找到指向最后那个结点的地址,也就是从前面(front)数第二个元素
break;
p=p->pNext;
}
*pVal=p->pNext->val;
p->pNext=NULL;
pQ->front=p;
free(p->pNext);
return true;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息