队列的实现及基本操作
给定一个初始为空的队列和一系列入队、出队操作,请编写程序输出每次出队的元素。队列的元素值均为整数。
输入格式:
输入第1行为1个正整数n,表示操作个数;接下来n行,每行表示一个操作,格式为1 d或0。1 d表示将整数d入队,0表示出队。n不超过20000。
输出格式:
按顺序输出每次出队的元素,每个元素一行。若某出队操作不合法(如在队列空时出队),则对该操作输出invalid。
输入样例:
7
1 1
1 2
0
0
0
1 3
0
输出样例:
1
2
invalid
3
#include<stdio.h>
#include<stdlib.h>
typedef int QElemType;
typedef struct QNode {
QElemType data;
struct QNode* next;
}Qnode, * QuenePtr;
typedef struct {
QuenePtr front;
QuenePtr rear;
int size;
}LinkQuene;
LinkQuene s;
void Initquene() {
s.front = (QuenePtr)malloc(sizeof(Qnode));
if (!s.front)
exit(-1);
s.rear = s.front;
s.front->next = NULL;
s.size = 0;
}
void enquene(QElemType e) {
QuenePtr p = (QuenePtr)malloc(sizeof(Qnode));
if (!p)
exit(-1);
p->data = e;
p->next = NULL;
s.rear->next = p;
s.rear = p;
s.size++;
}
void dequene() {
if (s.front == s.rear) {
exit(0);
}
printf("%d\n", s.front->next->data);
QuenePtr p = s.front->next;
s.front->next = p->next;
if (s.rear == p) {
s.rear = s.front;
}
free(p);
s.size--;
}
int input(char* str, int i) {
int b = 0;
while (str[i] != '\0') {
b = b * 10 + str[i] - '0';
i++;
}
return b;
}
int main() {
Initquene();
int times, val;
char str[100];
gets(str);
times = input(str, 0);
while (times--)
{
gets(str);
if (str[0] == '1') {
val = input(str, 2);
enquene(val);
}
else
{
if (s.size == 0) {
printf("invalid\n");
}
else {
dequene();
}
}
}
return 0;
}