一、不变顺序表(数组)实现列队
列队会有用完的时候,用过的位置不再使用。
#include"stdio.h"
int enQueue(int *arry, int rear, int data)
{
arry[rear] = data;
rear++;
return rear;
}
void deQueue(int *arry, int& front, int& rear)
{
while (front != rear)
{
printf("%d\n", arry[front]);
front++;
}
}
int main()
{
int arry[100];
int front ,rear;
front = rear = 0;
rear = enQueue(arry, rear, 1);
rear = enQueue(arry, rear, 2);
rear = enQueue(arry, rear, 3);
rear = enQueue(arry, rear, 4);
deQueue(arry, front, rear);
return 0;
}
二、不变顺序表(数组)实现循环列队
列队会有用完的时候,用过的位置可以再次使用。
#include"stdio.h"
#define ARRY_SIZE 5
int enQueue(int *arry, int front, int rear, int data)
{
if (rear >= ARRY_SIZE)
{
if ((rear - ARRY_SIZE)< front)
{
rear = 0;
}
else
{
printf("存储空间不足,不能进队\n");
return rear;
}
}
arry[rear] = data;
rear++;
return rear;
}
int deQueue(int *arry, int front, int rear)
{
printf("%d\n", arry[front]);
front++;
if (front >= ARRY_SIZE)
{
if ((front - ARRY_SIZE )<=rear)
{
front = 0;
}
}
return front;
}
int main()
{
int arry[100];
int front ,rear;
front = rear = 0;
rear = enQueue(arry, front, rear, 0);
rear = enQueue(arry, front, rear, 1);
rear = enQueue(arry, front, rear, 2);
rear = enQueue(arry, front, rear, 3);
rear = enQueue(arry, front, rear, 4);
front=deQueue(arry, front, rear);
rear = enQueue(arry, front, rear, 5);
front = deQueue(arry, front, rear);
front = deQueue(arry, front, rear);
front = deQueue(arry, front, rear);
front = deQueue(arry, front, rear);
front = deQueue(arry, front, rear);
front = deQueue(arry, front, rear);
return 0;
}
三、使用链表实现列队功能
#include"stdio.h"
#include"stdlib.h"
typedef struct qNode
{
int elem;
struct qNode *next;
}queueNode;
queueNode *enQueue(queueNode *head, int elem)
{
queueNode *temp=head;
queueNode *newNode = (queueNode *)malloc(sizeof(queueNode));
newNode->elem = elem;
newNode->next = NULL;
if (temp==NULL)
{
head = newNode;
}
else
{
while (temp->next != NULL)
{
temp = temp->next;
}
temp->next = newNode;
}
return head;
}
queueNode *deQueue(queueNode *head)
{
queueNode *temp = head;
if (temp == NULL)
{
printf("队列为空\n");
return head;
}
printf("出栈元素为:%d\n", temp->elem);
head = temp->next;
free(temp);
return head;
}
int main()
{
queueNode *head = NULL;
head = enQueue(head, 0);
head = enQueue(head, 1);
head = enQueue(head, 2);
head = deQueue(head);
head = deQueue(head);
head = deQueue(head);
head = enQueue(head, 3);
head = enQueue(head, 4);
head = enQueue(head, 5);
head = deQueue(head);
head = deQueue(head);
head = deQueue(head);
head = deQueue(head);
head = deQueue(head);
head = deQueue(head);
head = deQueue(head);
}
总结:
数据结构中使用链表结构实现列队是比较好的选择,使用可变数组存在出列队时候需要重新分配内存,比较麻烦。