C语言完成下列程序,该程序实现栈的链式存储结构,构建链栈(栈中的元素依次为China,Japan,France,India,Australia),依次进行进栈和出栈操作,判断栈空和栈满操作,返回栈顶元素操作。要求生成链栈时,从键盘上读取数据元素。
时间: 2024-03-16 09:48:05 浏览: 92
栈的链式存储:链栈的C语言实现
5星 · 资源好评率100%
以下是实现栈的链式存储结构的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
char data;
struct Node *next;
} Node;
typedef struct LinkedStack {
Node *top;
} LinkedStack;
LinkedStack *createStack() {
LinkedStack *stack = (LinkedStack *)malloc(sizeof(LinkedStack));
if (stack != NULL) {
stack->top = NULL;
}
return stack;
}
int isStackEmpty(LinkedStack *stack) {
return stack->top == NULL;
}
void push(LinkedStack *stack, char data) {
Node *new_node = (Node *)malloc(sizeof(Node));
if (new_node != NULL) {
new_node->data = data;
new_node->next = stack->top;
stack->top = new_node;
}
}
char pop(LinkedStack *stack) {
if (isStackEmpty(stack)) {
return '\0';
}
else {
Node *pop_node = stack->top;
char pop_data = pop_node->data;
stack->top = pop_node->next;
free(pop_node);
return pop_data;
}
}
char peek(LinkedStack *stack) {
if (isStackEmpty(stack)) {
return '\0';
}
else {
return stack->top->data;
}
}
int main() {
LinkedStack *stack = createStack();
push(stack, 'A');
push(stack, 'i');
push(stack, 'r');
push(stack, 't');
push(stack, 'o');
push(stack, 'o');
push(stack, 'n');
printf("Stack top: %c\n", peek(stack));
printf("Elements in stack: ");
while (!isStackEmpty(stack)) {
printf("%c ", pop(stack));
}
printf("\n");
free(stack);
return 0;
}
```
在上述代码中,我们使用了 `Node` 结构体来表示链表中的节点,使用 `LinkedStack` 结构体来表示链栈,其中 `top` 指向链栈的栈顶节点。`createStack` 函数用于创建一个空链栈,`isStackEmpty` 函数用于判断链栈是否为空,`push` 函数用于将元素压入链栈,`pop` 函数用于弹出链栈中的栈顶元素,`peek` 函数用于获取链栈的栈顶元素。在 `main` 函数中,我们利用 `push` 函数将元素依次压入链栈,然后使用 `peek` 函数获取链栈的栈顶元素,使用 `pop` 函数依次弹出链栈中的元素,直到链栈为空。最后,我们使用 `free` 函数释放链栈所占用的内存。
阅读全文