用c语言实现1.顺序栈的基本操作,创建、压栈、读栈顶、出栈,并利用顺序栈进行表达式求值2.链栈的基本操作创建、压栈、读栈顶、出栈
时间: 2024-11-25 16:16:52 浏览: 0
目录路径压栈出栈 C 语言源码.zip_C语言压栈代码_C语言源码_site:www.pudn.com
首先,我们来看如何使用C语言实现顺序栈(数组实现):
1. **创建栈**:
创建顺序栈需要一个固定大小的数组作为存储空间。例如:
```c
#define MAX_SIZE 100
int stack[MAX_SIZE];
int top = -1; // 栈顶指针初始化为-1,表示空栈
```
2. **入栈(压栈)**:
当元素需要添加到栈顶时,将top加一:
```c
void push(int value) {
if (top < MAX_SIZE - 1) {
stack[++top] = value;
} else {
printf("Stack overflow!\n");
}
}
```
3. **查看栈顶元素(读栈顶)**:
使用top指针访问栈顶元素,但注意不要直接返回,因为它是动态变化的:
```c
int peek() {
if (top != -1) {
return stack[top];
} else {
return -1; // 或者抛出异常,表示栈为空
}
}
```
4. **出栈(弹栈)**:
删除并返回栈顶元素,同时更新top:
```c
int pop() {
if (top != -1) {
int value = stack[top--]; // 退栈操作
return value;
} else {
printf("Stack underflow!\n");
return -1; // 或者抛出异常
}
}
```
对于链栈(链表实现),这里是一个简化的例子:
1. **创建链栈**:
定义一个节点结构体和头指针:
```c
struct Node {
int data;
struct Node* next;
};
struct Node* stackHead = NULL;
```
2. **入栈(压栈)**:
新建一个节点并将数据放入,然后链接到头结点之后:
```c
void push(int value) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = value;
newNode->next = stackHead;
stackHead = newNode;
}
```
3. **查看栈顶元素(读栈顶)**:
直接指向头结点即可:
```c
int peek() {
if (stackHead != NULL) {
return stackHead->data;
} else {
return -1;
}
}
```
4. **出栈(弹栈)**:
移除头结点的内容并释放内存,然后调整头指针:
```c
void pop() {
if (stackHead != NULL) {
struct Node* temp = stackHead;
stackHead = stackHead->next;
free(temp);
} else {
printf("Stack empty!\n");
}
}
```
阅读全文