您的位置:首页 > 其它

双队列的两种实现方式

2011-12-07 22:51 393 查看
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;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: