用C语言建立链栈,并在链栈上实现入栈和出栈操作并实现以下要求1. 根据输入的栈中元素个数n和各元素值建立一个顺序栈,并输出栈中各元素值。 2. 将数据元素e入栈,并输出入栈后的顺序栈中各元素值。 3. 将顺序栈中的栈顶元素出栈,并输出出栈元素的值和出栈后顺序栈中各元素值。
时间: 2024-02-01 19:14:43 浏览: 91
以下是用C语言实现链栈的代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data;
struct node *next;
} Node;
typedef struct {
Node *top;
} Stack;
// 初始化栈
void initStack(Stack *s) {
s->top = NULL;
}
// 判断栈是否为空
int isEmpty(Stack *s) {
return s->top == NULL;
}
// 入栈
void push(Stack *s, int data) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = data;
newNode->next = s->top;
s->top = newNode;
}
// 出栈
int pop(Stack *s) {
if (isEmpty(s)) {
printf("Error: stack is empty.\n");
exit(EXIT_FAILURE);
}
int data = s->top->data;
Node *p = s->top;
s->top = s->top->next;
free(p);
return data;
}
// 输出栈中元素
void printStack(Stack *s) {
printf("Stack: ");
Node *p = s->top;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
Stack s;
initStack(&s);
// 根据输入的栈中元素个数n和各元素值建立一个顺序栈,并输出栈中各元素值。
int n;
printf("Enter the size of the stack: ");
scanf("%d", &n);
printf("Enter the elements of the stack:\n");
for (int i = 0; i < n; i++) {
int data;
scanf("%d", &data);
push(&s, data);
}
printStack(&s);
// 将数据元素e入栈,并输出入栈后的顺序栈中各元素值。
int e;
printf("Enter the element to push: ");
scanf("%d", &e);
push(&s, e);
printStack(&s);
// 将顺序栈中的栈顶元素出栈,并输出出栈元素的值和出栈后顺序栈中各元素值。
int data = pop(&s);
printf("Pop element: %d\n", data);
printStack(&s);
return 0;
}
```
在这个程序中,我们首先定义了一个节点结构(`Node`)和一个栈结构(`Stack`)。栈结构包含一个指向栈顶节点的指针。然后,我们定义了一些基本的操作函数:`initStack()`用于初始化栈,`isEmpty()`用于判断栈是否为空,`push()`用于将元素入栈,`pop()`用于将栈顶元素出栈,`printStack()`用于输出栈中的元素。
在主函数中,我们首先通过用户输入建立一个栈,并输出栈中的元素。然后,我们让用户输入一个元素,并将其入栈。最后,我们将栈顶元素出栈,并输出出栈元素的值和出栈后栈中的元素。
阅读全文