您的位置:首页 > 编程语言

编程实现队列的入队/出队操作

2015-04-11 19:34 549 查看
思路:队列其实也是一个链表,只是队列还有两个特殊的结点,一个指向队头,一个指向队尾。先设计数据结构,如下

typedef struct student * PNode;
typedef struct linkqueue * Pqueue;

typedef struct student
{
int data;
PNode next;
}Node;

typedef struct linkqueue
{
PNode first;
PNode rear;
}queue;


1.入队操作其实是指向队尾的指针向后移,要判断队列是否为空或者只有一个结点的情况

2.出队操作其实是指向队头的指针向后移

整体代码如下:

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

typedef struct student * PNode; typedef struct linkqueue * Pqueue; typedef struct student { int data; PNode next; }Node; typedef struct linkqueue { PNode first; PNode rear; }queue;

Pqueue insert(Pqueue link,int num)
{
PNode p;
Pqueue q=link;
p=(PNode)malloc(sizeof(Node));
p->data=num;
if(link==NULL)
{
printf("添加第一个结点\n");
q=(Pqueue)malloc(sizeof(queue));
q->first=p;
q->rear=p;
q->rear->next=NULL;
return q;
}
q->rear->next=p;
q->rear=p;
q->rear->next=NULL;
return q;
}

Pqueue del(Pqueue queue)
{
if(queue==NULL)
{
printf("队列为空");
return NULL;
}
Pqueue q=queue;
PNode temp;
temp=q->first;
if(q->first->next!=NULL)
q->first=q->first->next;
else
{
printf("队列只有一个结点,删除完毕\n");
return NULL;
}
free(temp);
return q;
}

void print(Pqueue link)
{
PNode q=link->first;
while(q!=NULL)
{
printf("%d ",q->data);
q=q->next;
}
printf("\n");
}

int main(void)
{
Pqueue linkqueue=NULL;
int flag=0,num;
while(1)
{
printf("选择入队或者出队:1为入队,2为出队,0为退出\n");
scanf("%d",&flag);
if(flag==1)
{
printf("请选择要入队的值:\n");
scanf("%d",&num);
linkqueue=insert(linkqueue,num);
printf("打印入队后的队列:\n");
print(linkqueue);
}
else if(flag==2)
{
linkqueue=del(linkqueue);
printf("打印出队后的队列:\n");
print(linkqueue);
}
else
break;
}
printf("打印最后的队列:\n");
print(linkqueue);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: