用C语言编写程序实现顺序栈的数据结构,初始化栈、进栈、出栈等算法, 主函数流程:ABCDEFG#顺序进栈,遇到#号结束,#号是结束字符,之后用不定循环出栈,输出出栈的顺序:GFEDCBA。
时间: 2024-10-18 07:18:48 浏览: 35
顺序栈的初始化、进栈、出栈、判空、进制转换
在C语言中,我们可以创建一个简单的顺序栈数据结构来满足这个需求。这里我们使用数组作为底层存储,并实现基本的操作如初始化、入栈和出栈。
首先,我们需要包含头文件并定义栈的基本结构:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 10 // 定义栈的最大容量
typedef struct {
int data[MAX_SIZE]; // 栈元素
int top; // 栈顶指针
} Stack;
```
接下来,我们会实现栈的相关操作:
```c
// 初始化栈
void init(Stack *s) {
s->top = -1;
}
// 判断栈是否为空
int is_empty(Stack *s) {
return s-1;
}
// 判断栈是否已满
int is_full(Stack *s) {
return s->top == MAX_SIZE - 1;
}
// 入栈操作
void push(Stack *s, int value) {
if (is_full(s)) {
printf("Stack overflow.\n");
return;
}
s->data[++s->top] = value;
}
// 出栈操作
int pop(Stack *s) {
if (is_empty(s)) {
printf("Stack underflow.\n");
return -1; // 返回一个特殊值表示错误
}
return s->data[s->top--];
}
```
现在,我们可以编写主函数流程来实现题目所描述的情况:
```c
int main() {
Stack stack;
init(&stack);
char input[] = "ABCDEFG#";
for (char c : input) {
if (c == '#') {
break; // 遇到#号,停止输入
} else {
push(&stack, c - 'A'); // A-Z转化为0-25(方便索引)
}
}
while (!is_empty(&stack)) { // 使用不定循环直到栈空
int popped = pop(&stack);
if (popped != -1) {
printf("%c", 'A' + popped); // 将数字转换回字母
}
}
printf("\n");
return 0;
}
```
运行上述代码,你会得到输出:GFEDCBA。
阅读全文