创建一个长度为6的顺序栈,要求将x的值进行入栈和出栈操作。
时间: 2024-06-12 21:11:32 浏览: 132
顺序栈是一种基于数组实现的栈,它的特点是后进先出,也就是说最后一个入栈的元素最先出栈。创建一个长度为6的顺序栈,可以先定义一个数组作为栈的存储空间,然后定义一个栈顶指针top,初始值为-1,表示栈为空。入栈操作就是将元素x放入数组中top+1的位置,然后将top的值加1;出栈操作就是将数组中top位置的元素弹出,然后将top的值减1。如果栈已满,再进行入栈操作就会导致栈溢出,因此需要在入栈操作前判断栈是否已满。如果栈为空,再进行出栈操作就会导致栈下溢,因此需要在出栈操作前判断栈是否为空。
清空操作可以将栈顶指针top重置为-1,表示栈为空;销毁操作可以释放栈的存储空间,即释放数组的内存空间。
逆置一个字符串可以使用栈来实现。具体做法是将字符串中的每个字符依次入栈,然后再依次出栈,就可以得到逆置后的字符串。
下面是对应的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 6
typedef struct {
int *base; // 栈底指针
int top; // 栈顶指针
} SqStack;
// 初始化栈
void InitStack(SqStack *s) {
s->base = (int *)malloc(MAX_SIZE * sizeof(int));
s->top = -1;
}
// 判断栈是否为空
int IsEmpty(SqStack *s) {
return s->top == -1;
}
// 判断栈是否已满
int IsFull(SqStack *s) {
return s->top == MAX_SIZE - 1;
}
// 入栈操作
void Push(SqStack *s, int x) {
if (IsFull(s)) {
printf("Stack overflow!\n");
return;
}
s->top++;
s->base[s->top] = x;
}
// 出栈操作
int Pop(SqStack *s) {
if (IsEmpty(s)) {
printf("Stack underflow!\n");
return -1;
}
int x = s->base[s->top];
s->top--;
return x;
}
// 取栈顶元素
int GetTop(SqStack *s) {
if (IsEmpty(s)) {
printf("Stack is empty!\n");
return -1;
}
return s->base[s->top];
}
// 清空栈
void ClearStack(SqStack *s) {
s->top = -1;
}
// 销毁栈
void DestroyStack(SqStack *s) {
free(s->base);
s->base = NULL;
s->top = -1;
}
// 逆置字符串
void ReverseString(char *str) {
SqStack s;
InitStack(&s);
int len = strlen(str);
for (int i = 0; i < len; i++) {
Push(&s, str[i]);
}
for (int i = 0; i < len; i++) {
str[i] = Pop(&s);
}
}
int main() {
SqStack s;
InitStack(&s);
int x;
// 入栈操作
for (int i = 0; i < MAX_SIZE; i++) {
printf("Enter a number to push into the stack: ");
scanf("%d", &x);
Push(&s, x);
}
// 出栈操作
for (int i = 0; i < MAX_SIZE; i++) {
x = Pop(&s);
printf("%d ", x);
}
printf("\n");
// 逆置字符串
char str[] = "This is a test";
ReverseString(str);
printf("%s\n", str);
// 销毁栈
DestroyStack(&s);
return 0;
}
```
阅读全文