请实现顺序栈的基本操作,包括初始化、判断栈空、栈满,求栈长,清空栈,销毁栈,进栈,出栈,取栈顶元素。
时间: 2024-04-30 16:14:04 浏览: 254
以下是顺序栈的基本操作实现:
1.初始化
```c
#define MAXSIZE 100 // 定义栈的最大容量
typedef struct {
int data[MAXSIZE]; // 存放栈中元素
int top; // 栈顶指针
} SqStack;
void InitStack(SqStack *S) {
S->top = -1; // 初始化栈顶指针为-1,表示栈为空
}
```
2.判断栈空
```c
int IsEmpty(SqStack S) {
if (S.top == -1) {
return 1; // 栈为空
} else {
return 0; // 栈不为空
}
}
```
3.判断栈满
```c
int IsFull(SqStack S) {
if (S.top == MAXSIZE - 1) {
return 1; // 栈满
} else {
return 0; // 栈未满
}
}
```
4.求栈长
```c
int StackLength(SqStack S) {
return S.top + 1; // 栈长等于栈顶指针+1
}
```
5.清空栈
```c
void ClearStack(SqStack *S) {
S->top = -1; // 将栈顶指针置为-1,表示栈为空
}
```
6.销毁栈
```c
void DestroyStack(SqStack *S) {
free(S); // 释放栈所占用的内存空间
}
```
7.进栈
```c
int Push(SqStack *S, int x) {
if (S->top == MAXSIZE - 1) {
return 0; // 栈满,无法进栈
} else {
S->top++; // 栈顶指针加1
S->data[S->top] = x; // 将元素x压入栈顶
return 1; // 进栈成功
}
}
```
8.出栈
```c
int Pop(SqStack *S, int *x) {
if (S->top == -1) {
return 0; // 栈空,无法出栈
} else {
*x = S->data[S->top]; // 将栈顶元素赋值给x
S->top--; // 栈顶指针减1
return 1; // 出栈成功
}
}
```
9.取栈顶元素
```c
int GetTop(SqStack S, int *x) {
if (S.top == -1) {
return 0; // 栈空,无法取栈顶元素
} else {
*x = S.data[S.top]; // 将栈顶元素赋值给x
return 1; // 取栈顶元素成功
}
}
--相关问题--:
阅读全文