C语言队列练习:输入N组队列操作序列,每组以S开始X结束。输出每组操作后的队列元素。
input:
2
S
E 0
E 1
X
S
E 0
E 1
D
X
Output:
01
1
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#define MAX 1024
struct Link
{
int data;
struct Link* next;
};
struct Queue
{
struct Link* front;
struct Link* rear;
int size;
};
void QueueInit(struct Queue* queue)
{
queue->front = NULL;
queue->rear = NULL;
queue->size = 0;
}
int QueueEmpty(struct Queue* queue)
{
return (queue->size == 0);
}
void QueuePush(struct Queue* queue, int data)
{
struct Link* node;
node = (struct Link*)malloc(sizeof(struct Link));
assert(node != NULL);
node->data = data;
node->next = NULL;
if (QueueEmpty(queue))
{
queue->front = node;
queue->rear = node;
}
else
{
queue->rear->next = node;
queue->rear = node;
}
++queue->size;
}
int QueuePop(struct Queue* queue, int* data)
{
if (QueueEmpty(queue))
{
return 0;
}
struct Link* tmp = queue->front;
*data = queue->front->data;
queue->front = queue->front->next;
free(tmp);
--queue->size;
return 1;
}
void QueueDestroy(struct Queue* queue)
{
struct Link* tmp;
while (queue->front)
{
tmp = queue->front;
queue->front = queue->front->next;
free(tmp);
}
}
int main(void)
{
int N, cnt = 0, j = 0;
scanf_s("%d", &N);
getchar();
char input_str[MAX];
char str[MAX][MAX] = {'0'};
while (1)
{
gets_s(input_str);
strcat_s(str[cnt], input_str);
if (input_str[0] == 'X')
{
cnt++;
}
j++;
if (cnt >= N)
{
break;
}
}
struct Queue queue;
QueueInit(&queue);
int non = 0;
for (int i = 0; i < N; ++i)
{
for (int k = 0 ; k < MAX ; k++)
{
if (str[i][k] == 'E')
{
int tmp = str[i][k + 2] - '0';
QueuePush(&queue, tmp);
}
if (str[i][k] == 'D' && !QueueEmpty(&queue))
{
QueuePop(&queue, &non);
}
if (str[i][k] == 'X') {
int s;
while (!QueueEmpty(&queue))
{
QueuePop(&queue, &s);
printf("%d ", s);
}
printf("\n");
QueueInit(&queue);
break;
}
}
}
return 0;
}