用c语言实现链栈的各种基本运算,并设计程序调用这些算法进行功能测试
时间: 2024-11-30 14:19:23 浏览: 8
在C语言中,我们可以使用结构体和指针来实现链式栈。链栈是一种动态数据结构,它允许我们在栈顶添加和删除元素,而不需要预先分配固定大小的空间。以下是链栈的基本操作以及相应的函数实现:
1. **创建链栈**:
```c
typedef struct Node {
int data;
struct Node* next;
} StackNode;
StackNode* createStack() {
return (StackNode*)malloc(sizeof(StackNode));
}
```
2. **初始化链栈**:
```c
void initialize(StackNode** top) {
*top = NULL;
}
```
3. **检查栈是否为空**:
```c
int isEmpty(StackNode* top) {
return top == NULL;
}
```
4. **入栈(push)**:
```c
void push(StackNode** top, int value) {
StackNode* newNode = createStack();
newNode->data = value;
newNode->next = *top;
*top = newNode;
}
```
5. **出栈(pop)**:
```c
int pop(StackNode** top) {
if (isEmpty(top)) {
return -1; // 返回错误码或特殊值表示栈空
}
int value = (*top)->data;
StackNode* temp = *top;
*top = (*top)->next;
free(temp);
return value;
}
```
6. **查看栈顶元素但不移除(peek)**:
```c
int peek(StackNode* top) {
if (isEmpty(top)) {
return -1;
}
return (*top)->data;
}
```
7. **显示栈的内容**:
```c
void display(StackNode* top) {
StackNode* current = top;
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
}
```
为了测试这些功能,你可以编写一个主程序,比如:
```c
int main() {
StackNode* stackTop = NULL;
initialize(&stackTop);
// 测试操作
push(&stackTop, 10);
push(&stackTop, 20);
push(&stackTop, 30);
display(stackTop); // 应该显示 30 20 10
printf("Popped element: %d\n", pop(&stackTop)); // 输出 30
display(stackTop); // 应该显示 20 10
return 0;
}
```
阅读全文