Upload files to "DS/C/Lab/Week5"
This commit is contained in:
parent
0589cce66a
commit
0cdc830d54
4 changed files with 277 additions and 0 deletions
84
DS/C/Lab/Week5/QueueStack.c
Normal file
84
DS/C/Lab/Week5/QueueStack.c
Normal file
|
@ -0,0 +1,84 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define MAX_SIZE 100
|
||||
|
||||
typedef struct {
|
||||
int items[MAX_SIZE];
|
||||
int top;
|
||||
} Stack;
|
||||
|
||||
Stack* createStack() {
|
||||
Stack* s = (Stack*)malloc(sizeof(Stack));
|
||||
s->top = -1;
|
||||
return s;
|
||||
}
|
||||
|
||||
void push(Stack* s, int x) {
|
||||
if (s->top == MAX_SIZE - 1) {
|
||||
printf("Stack Overflow\n");
|
||||
return;
|
||||
}
|
||||
s->items[++(s->top)] = x;
|
||||
}
|
||||
|
||||
int pop(Stack* s) {
|
||||
if (s->top == -1) {
|
||||
printf("Stack Underflow\n");
|
||||
return -1;
|
||||
}
|
||||
return s->items[(s->top)--];
|
||||
}
|
||||
|
||||
int isEmpty(Stack* s) {
|
||||
return s->top == -1;
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
Stack* s1;
|
||||
Stack* s2;
|
||||
} Queue;
|
||||
|
||||
Queue* createQueue() {
|
||||
Queue* q = (Queue*)malloc(sizeof(Queue));
|
||||
q->s1 = createStack();
|
||||
q->s2 = createStack();
|
||||
return q;
|
||||
}
|
||||
|
||||
void enqueue(Queue* q, int x) {
|
||||
push(q->s1, x);
|
||||
}
|
||||
|
||||
int dequeue(Queue* q) {
|
||||
int x;
|
||||
if (isEmpty(q->s1) && isEmpty(q->s2)) {
|
||||
printf("Queue is empty\n");
|
||||
return -1;
|
||||
}
|
||||
if (isEmpty(q->s2)) {
|
||||
while (!isEmpty(q->s1)) {
|
||||
x = pop(q->s1);
|
||||
push(q->s2, x);
|
||||
}
|
||||
}
|
||||
return pop(q->s2);
|
||||
}
|
||||
|
||||
int main() {
|
||||
Queue* q = createQueue();
|
||||
|
||||
enqueue(q, 1);
|
||||
enqueue(q, 2);
|
||||
enqueue(q, 3);
|
||||
|
||||
printf("%d\n", dequeue(q));
|
||||
printf("%d\n", dequeue(q));
|
||||
|
||||
enqueue(q, 4);
|
||||
|
||||
printf("%d\n", dequeue(q));
|
||||
printf("%d\n", dequeue(q));
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue