1.输入限制性双队列代码实现
# include <stdio.h>
# include <stdlib.h>
typedef struct queue_node
{
int data;
struct queue_node * next;
}QUEUE;
QUEUE * rear = NULL;
QUEUE * front = NULL;
int InQueueRear(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 InQueueFront(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;
}
int OutQueueFront(int * value)
{
QUEUE * p = NULL;
if(NULL == front)
return 0;
p = front;
front = front->next;
*value = p->data;
free(p);
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.Store from front queue 2.Store from rear queue 3.quit -->");
scanf("%d", &res);
fflush(stdin);
}
if(res == 1)
{
printf("Please input the queue value:");
scanf("%d", &res);
fflush(stdin);
if(InQueueFront(res))
PrintQueue();
else
printf("Failure\n");
}
else if(res == 2)
{
printf("Please input the queue value:");
scanf("%d", &res);
fflush(stdin);
if(InQueueRear(res))
PrintQueue();
else
printf("Failure\n");
}
else if(res == 3)
break;
}
}
2.输出限制性双队列代码实现
# include <stdio.h>
# include <stdlib.h>
typedef struct queue_node
{
int data;
struct queue_node * next;
}QUEUE;
QUEUE * rear = NULL;
QUEUE * front = NULL;
int InQueueRear(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 OutQueueFront(int * value)
{
QUEUE * p = NULL;
if(NULL == front)
return 0;
p = front;
front = front->next;
*value = p->data;
free(p);
return 1;
}
int OutQueueRear(int * value)
{
QUEUE * p = NULL;
if(NULL == rear)
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 i, res, arr[5] = {1, 2, 3, 4, 5};
for(i=0; i<5; ++i)
InQueue(arr[i]);
while(1)
{
printf("1.Out queue from front 2.Out queue from rear 3.quit -->");
scanf("%d", &res);
fflush(stdin);
if(res == 1)
{
if(OutQueueFront(&res) == 1)
printf("The value of out queue is %d\n", res);
else
printf("The queue is empty\n");
}
else if(res == 2)
{
if(OutQueueRear(&res) == 1)
printf("The value of out queue is %d\n", res);
else
printf("The queue is empty\n");
}
else if(res == 3)
break;
}
}