请采用链栈作为存储结构,实现对大写字母表(A,B,C,D…)数据元素进行进栈、出栈、读取栈顶元素的操作,同时实现初始化、打印栈的功能。c语言
时间: 2024-10-11 16:11:53 浏览: 47
习题三第页-数据结构习题
在C语言中,我们可以使用链式存储结构(如单向链表)来实现堆栈(Stack)操作,因为链表可以动态地增加或删除元素,非常适合需要频繁插入和删除的数据结构。这里是一个简单的链栈实现,用于处理大写字母表:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链栈节点结构体
typedef struct Node {
char data;
struct Node* next;
} StackNode;
// 初始化空栈
StackNode* initStack() {
StackNode* top = NULL;
return top;
}
// 进栈(压入)
void push(StackNode** top, char item) {
StackNode* newNode = (StackNode*)malloc(sizeof(StackNode));
if (!newNode) {
printf("Memory allocation failed.\n");
return;
}
newNode->data = item;
newNode->next = *top;
*top = newNode;
printf("%c pushed to stack\n", item);
}
// 出栈(弹出)
char pop(StackNode** top) {
if (*top == NULL) {
printf("Stack is empty.\n");
return '\0'; // 返回空字符表示栈空
}
char item = (*top)->data;
StackNode* temp = *top;
*top = (*top)->next;
free(temp); // 释放内存
return item;
}
// 查看栈顶元素(不修改栈)
char peek(StackNode* top) {
if (top == NULL) {
printf("Stack is empty.\n");
return '\0'; // 返回空字符表示栈空
}
return top->data;
}
// 打印栈内容
void printStack(StackNode* top) {
StackNode* temp = top;
while (temp != NULL) {
printf("%c ", temp->data);
temp = temp->next;
}
printf("\n");
}
int main() {
StackNode* stack = initStack();
// 示例操作
push(&stack, 'A');
push(&stack, 'B');
printf("Stack after pushing A and B: ");
printStack(stack);
char topElement = peek(stack);
printf("Top element is %c\n", topElement);
char poppedElement = pop(&stack);
printf("Popped element: %c\n", poppedElement);
printStack(stack);
return 0;
}
```
在这个示例中,我们创建了一个链栈,并实现了基本的`push`,`pop`,`peek`和`printStack`函数。注意,在实际应用中,还需要添加错误检查和清理代码,以确保程序的健壮性。
阅读全文