编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能:\n\n(1)初始化顺序栈\n\n(2)插入元素\n\n(3)删除栈顶元素\n\n(4)取栈顶元素\n\n(5)遍历顺序栈\n\n(6)置空顺序栈
时间: 2023-11-17 22:59:01 浏览: 158
顺序栈是一种基于数组实现的栈结构,它具有后进先出的特点。下面是实现顺序栈的各种基本运算的算法,并在此基础上设计一个主程序完成如下功能:
(1)初始化顺序栈
```c
#define MAXSIZE 100 // 定义栈的最大长度
typedef struct {
char data[MAXSIZE]; // 存放栈中元素
int top; // 栈顶指针
} SqStack;
void InitStack(SqStack *S) {
S->top = -1; // 初始化栈顶指针
}
```
(2)插入元素
```c
int Push(SqStack *S, char x) {
if (S->top == MAXSIZE - 1) { // 栈满
return 0;
}
S->top++; // 栈顶指针加1
S->data[S->top] = x; // 将元素x入栈
return 1;
}
```
(3)删除栈顶元素
```c
int Pop(SqStack *S, char *x) {
if (S->top == -1) { // 栈空
return 0;
}
*x = S->data[S->top]; // 将栈顶元素赋值给x
S->top--; // 栈顶指针减1
return 1;
}
```
(4)取栈顶元素
```c
int GetTop(SqStack *S, char *x) {
if (S->top == -1) { // 栈空
return 0;
}
*x = S->data[S->top]; // 将栈顶元素赋值给x
return 1;
}
```
(5)遍历顺序栈
```c
void TraverseStack(SqStack *S) {
int i;
for (i = S->top; i >= 0; i--) { // 从栈顶到栈底遍历栈中元素
printf("%c ", S->data[i]);
}
printf("\n");
}
```
(6)置空顺序栈
```c
void ClearStack(SqStack *S) {
S->top = -1; // 将栈顶指针置为-1,表示栈为空
}
```
主程序如下:
```c
int main() {
SqStack S;
char x;
int i, n;
InitStack(&S); // 初始化栈
printf("请输入要插入的元素个数:");
scanf("%d", &n);
printf("请输入%d个元素:", n);
for (i = 0; i < n; i++) { // 依次进栈各元素
scanf(" %c", &x);
Push(&S, x);
}
printf("栈的长度为:%d\n", S.top + 1); // 输出栈的长度
printf("从栈顶到栈底的元素为:");
TraverseStack(&S); // 输出从栈顶到栈底的元素
printf("出栈序列为:");
while (Pop(&S, &x)) { // 输出出栈序列
printf("%c ", x);
}
printf("\n");
ClearStack(&S); // 置空顺序栈
return 0;
}
```
阅读全文