设计一个程序,实现单链栈的各种基本运算,完成以下功能:\n\n(1)初始化链栈s。\n\n(2)判断栈s是否非空。\n\n(3)依次进栈元素a,b,c,d,e。\n\n(4)输出链栈长度。\n\n(5)输出从栈顶到栈底的
时间: 2023-04-20 18:03:27 浏览: 139
元素。\n\n(6)出栈一个元素。\n\n(7)输出出栈后的链栈长度。\n\n(8)清空链栈s。\n\n(9)判断栈s是否为空。\n\n(10)结束程序。
1. 首先定义一个链栈结构体,包含一个指向栈顶的指针top和链栈长度len。
2. 初始化链栈s,即将top指针置为NULL,len置为0。
3. 判断栈s是否非空,即判断top指针是否为NULL。
4. 依次进栈元素a,b,c,d,e,即将它们依次插入到链表的头部,同时更新top指针和len。
5. 输出链栈长度,即输出len的值。
6. 输出从栈顶到栈底的元素,即从top指针开始遍历链表,依次输出每个节点的值。
7. 出栈一个元素,即将链表头部的节点删除,同时更新top指针和len。
8. 输出出栈后的链栈长度,即输出len的值。
9. 清空链栈s,即将链表中所有节点删除,同时将top指针置为NULL,len置为0。
10. 判断栈s是否为空,即判断top指针是否为NULL。
11. 结束程序。
示例代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node;
typedef struct Stack {
Node *top;
int len;
} Stack;
void init(Stack *s) {
s->top = NULL;
s->len = 0;
}
int isEmpty(Stack *s) {
return s->top == NULL;
}
void push(Stack *s, int data) {
Node *node = (Node *)malloc(sizeof(Node));
node->data = data;
node->next = s->top;
s->top = node;
s->len++;
}
int pop(Stack *s) {
if (isEmpty(s)) {
printf("Stack is empty.\n");
return -1;
}
int data = s->top->data;
Node *temp = s->top;
s->top = s->top->next;
free(temp);
s->len--;
return data;
}
void clear(Stack *s) {
while (s->top != NULL) {
Node *temp = s->top;
s->top = s->top->next;
free(temp);
}
s->len = 0;
}
void print(Stack *s) {
printf("Stack length: %d\n", s->len);
printf("Stack elements from top to bottom: ");
Node *p = s->top;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
Stack s;
init(&s);
printf("Is stack empty? %d\n", isEmpty(&s));
push(&s, 1);
push(&s, 2);
push(&s, 3);
push(&s, 4);
push(&s, 5);
print(&s);
printf("Pop element: %d\n", pop(&s));
print(&s);
clear(&s);
printf("Is stack empty? %d\n", isEmpty(&s));
return 0;
}
阅读全文