编程实现队列的入队/出队操作
2015-04-11 19:34
549 查看
思路:队列其实也是一个链表,只是队列还有两个特殊的结点,一个指向队头,一个指向队尾。先设计数据结构,如下
1.入队操作其实是指向队尾的指针向后移,要判断队列是否为空或者只有一个结点的情况
2.出队操作其实是指向队头的指针向后移
整体代码如下:
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;
}
相关文章推荐
- 编程实现顺序队列的入队操作和出队操作,并将出队结果输出
- 编程实现队列的入队/出队操作
- 编程实现队列入队出队操作
- 编程实现队列的入队/出队操作
- 采用顺序存储实现循环队列的初始化、入队、出队操作。
- 剑指offer面试题java实现之题7:用两个栈模拟一个队列的入队和出队操作
- 子函数实现链式队列 的 操作,创建、入队、出队、退出。
- C语言实现循环队列基本操作(初始化、判断队空、入队、出队)
- 编程实现队列的入队、出队、测长、打印
- 队列的入队、出队操作实现
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- c语言:用双向链表实现双端队列(队列两端都可以进行入队出队操作)
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- 利用顺序存储结构实现双端队列的入队和出队操作
- 两个栈实现一个队列,并实现队列入队、出队、取队头、取队尾相关操作
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- 采用链式存储实现队列的初始化、入队、出队操作。
- 用栈实现队列入队出队操作
- 链队列的初始化、入队、出队等操作实现
- 编程实现队列的入队、出队、测长、打印