编写顺序栈和链式栈的push/Pop/IsEmpty/IsFull/InitStack/peek的函数,并在主程序中调用
时间: 2023-10-01 19:02:12 浏览: 58
顺序栈:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef int ElemType;
typedef struct {
ElemType data[MAXSIZE];
int top;
} SqStack;
void InitStack(SqStack *s) {
s->top = -1;
}
int IsEmpty(SqStack s) {
return s.top == -1;
}
int IsFull(SqStack s) {
return s.top == MAXSIZE - 1;
}
void Push(SqStack *s, ElemType e) {
if (IsFull(*s)) {
printf("Stack is full.\n");
return;
}
s->top++;
s->data[s->top] = e;
}
ElemType Pop(SqStack *s) {
if (IsEmpty(*s)) {
printf("Stack is empty.\n");
exit(1);
}
ElemType e = s->data[s->top];
s->top--;
return e;
}
ElemType Peek(SqStack s) {
if (IsEmpty(s)) {
printf("Stack is empty.\n");
exit(1);
}
return s.data[s.top];
}
int main() {
SqStack s;
InitStack(&s);
Push(&s, 1);
Push(&s, 2);
Push(&s, 3);
while (!IsEmpty(s)) {
printf("%d\n", Pop(&s));
}
return 0;
}
```
链式栈:
```c
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct StackNode {
ElemType data;
struct StackNode *next;
} StackNode, *LinkStackPtr;
typedef struct {
LinkStackPtr top;
int count;
} LinkStack;
void InitStack(LinkStack *s) {
s->top = NULL;
s->count = 0;
}
int IsEmpty(LinkStack s) {
return s.count == 0;
}
void Push(LinkStack *s, ElemType e) {
LinkStackPtr p = (LinkStackPtr) malloc(sizeof(StackNode));
p->data = e;
p->next = s->top;
s->top = p;
s->count++;
}
ElemType Pop(LinkStack *s) {
if (IsEmpty(*s)) {
printf("Stack is empty.\n");
exit(1);
}
LinkStackPtr p = s->top;
ElemType e = p->data;
s->top = p->next;
s->count--;
free(p);
return e;
}
ElemType Peek(LinkStack s) {
if (IsEmpty(s)) {
printf("Stack is empty.\n");
exit(1);
}
return s.top->data;
}
int main() {
LinkStack s;
InitStack(&s);
Push(&s, 1);
Push(&s, 2);
Push(&s, 3);
while (!IsEmpty(s)) {
printf("%d\n", Pop(&s));
}
return 0;
}
```