队列的实现及基本操作
给定一个初始为空的队列和一系列入队、出队操作,请编写程序输出每次出队的元素。队列的元素值均为整数。
输入格式:
输入第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;
}