输出限制性双队列
#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("存入失败");
}else if(res == 2)
{
printf("请输入要存入的值:");
scanf("%d",&res);
fflush(stdin);
if(InQueueByRear(res))
{
PrintQueue();
}else
printf("存入失败");
}else if(res == 3)
break;
}
}VC6运行效果图
输入限制性双队列
#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;
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)
break;
}
}VC6运行效果图
1273

被折叠的 条评论
为什么被折叠?



