编程实现顺序栈表的类型定义及顺序表的初始化操作、入栈操作、出栈操作、取栈顶元素操作、输出操作等,并对其进行验证 数据结构C语言代码
时间: 2024-10-16 15:16:22 浏览: 56
在C语言中,我们可以使用数组来实现简单的顺序栈(也称为线性表)。首先,我们需要定义栈的数据结构,通常包含两个部分:一个用于存储数据的数组`stack_data[]`和一个表示栈顶位置的指针`top`。
```c
typedef struct Stack {
int capacity; // 栈的最大容量
int top; // 当前栈顶元素的位置
} Stack;
```
接下来,我们分别实现初始化、入栈(push)、出栈(pop)、取栈顶元素(peek)以及输出(display)的操作:
1. 初始化操作(createStack):
```c
void createStack(Stack *s, int size) {
s->capacity = size;
s->top = -1; // 初始栈为空,top指向-1
}
```
2. 入栈操作(push):
```c
void push(Stack *s, int value) {
if (s->top == s->capacity - 1) { // 若已满,则需要动态扩容
resizeStack(s);
}
s->top++;
s->stack_data[s->top] = value;
}
```
3. 出栈操作(pop):
```c
int pop(Stack *s) {
if (isEmpty(s)) {
return -1; // 空栈错误处理
}
int poppedValue = s->stack_data[s->top];
s->top--;
return poppedValue;
}
```
4. 取栈顶元素操作(peek):
```c
int peek(Stack *s) {
if (isEmpty(s)) {
return -1; // 空栈错误处理
}
return s->stack_data[s->top];
}
```
5. 输出操作(displayStack):
```c
void displayStack(Stack *s) {
if (isEmpty(s)) {
printf("Stack is empty.\n");
} else {
for (int i = s->top; i >= 0; i--) {
printf("%d ", s->stack_data[i]);
}
printf("\n");
}
}
```
**验证示例:**
为了验证上述函数是否正确,我们可以创建一个测试栈,依次执行push、pop和peek操作,然后检查结果并打印整个栈的内容。
```c
int main() {
Stack myStack;
createStack(&myStack, 5); // 创建初始容量为5的栈
push(&myStack, 1);
push(&myStack, 2);
push(&myStack, 3);
push(&myStack, 4);
push(&myStack, 5); // 这里会触发扩容
printf("After pushing:\n");
displayStack(&myStack);
int popped = pop(&myStack);
printf("Popped element: %d\n", popped); // 应该弹出3
printf("Top element after pop: ");
if (peek(&myStack) != -1)
printf("%d\n", peek(&myStack)); // 应该返回2
displayStack(&myStack);
return 0;
}
```
阅读全文