双队列的两种实现方式

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;
}
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值