1.输入限制性双队列:
代码:InLimitDeQueue.c
#include<stdio.h>
#include<stdlib.h>
typedef struct _queue
{
int data;
struct _queue *next;
}QUEUE;
QUEUE * rear = NULL;
QUEUE * front = NULL;
//输入限制型双队列
int InQueue(int value)
{
QUEUE * q = (QUEUE *)malloc(sizeof(QUEUE));
if(q == NULL) return 0;
q->data = value;
q->next = NULL;
if(front == NULL)
front = q;
else
rear->next = q;
rear = q;
return 1;
}
int OutQueueByFront(int *value)
{
QUEUE * p = NULL;
if(front == NULL)
return 0;
p = front;
front = front->next;
*value = p->data;
free(p);
return 1;
}
int OutQueueByRear(int *value)
{
QUEUE *p = NULL;
if(rear == NULL)
return 0;
//只有一个数据
if(rear == front)
{
*value = rear->data;
free(rear);
rear = NULL;
front = NULL;
}else{
p = front;
//使p指向最后一个的前面一个
while(p->next != rear)
p = p->next;
*value = rear->data;
free(rear);
rear = p;
rear->next = NULL;
}
return 1;
}
void main()
{
int res,i,arr[5] = {1,2,3,4,5};
for(i = 0;i<5;i++)
InQueue(arr[i]);
while(1)
{
printf("1.从队头取出;2.从队尾取出;3.退出:");
scanf("%d",&res);
//清空输入缓冲区
fflush(stdin);
if(res == 1)
{
if(OutQueueByFront(&res) == 1)
printf("取出的值为:%d\n",res);
else
printf("队列为空!\n");
}else if(res == 2)
{
if(OutQueueByRear(&res) == 1)
printf("取出的值为:%d\n",res);
else
printf("队列为空!\n");
}else if(res == 3)
{
exit(0);
}
}
}
运行效果:
存入队列的元素为1,2,3,4,5
2.输出限制性双队列:
代码:OutLimitDeQueue.c
#include<stdio.h>
#include<stdlib.h>
typedef struct _queue
{
int data;
struct _queue *next;
}QUEUE;
QUEUE * rear = NULL;
QUEUE * front = NULL;
//输出限制型双队列
int OutQueue(int *value)
{
QUEUE *p = NULL;
if(front == NULL)
return 0;
p = front;
front = front->next;
*value = p->data;
free(p);
return 1;
}
int InQueueByRear(int value)
{
QUEUE *q = (QUEUE *)malloc(sizeof(QUEUE));
if(q == NULL) return 0;
q->data = value;
q->next = NULL;
if(rear == NULL)
front = q;
else
rear->next = q;
rear = q;
return 1;
}
int InQueueByFront(int value)
{
QUEUE *q = (QUEUE *)malloc(sizeof(QUEUE));
if(q == NULL)return 0;
q->data = value;
q->next = front;
front = q;
if(rear == NULL)
rear = q;
return 1;
}
void PrintQueue()
{
QUEUE *p = front;
while(p)
{
printf("%5d",p->data);
p = p->next;
}
printf("\n");
}
void main()
{
int res;
while(1)
{
printf("1.从队头存入;2.从队尾存入;3.退出");
scanf("%d",&res);
fflush(stdin);
if(res == 1)
{
printf("请输入要存入的值:");
scanf("%d",&res);
fflush(stdin);
if(InQueueByFront(res))
{
PrintQueue();
}else
printf("存入失败\n");
}else if(res == 2)
{
printf("请输入要存入的值:");
scanf("%d",&res);
fflush(stdin);
if(InQueueByRear(res))
{
PrintQueue();
}else
printf("存入失败\n");
}else if(res == 3)
break;
}
}




