#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct Node{
int value;
struct Node * next;
}NODE,*PNODE;
typedef struct Stack{
PNODE top;
PNODE bottom;
}STACK,*PSTACK;
void init_stack(PSTACK pStack);
void push(PSTACK pStack);
void pop(PSTACK pStack);
void traverse_stack(PSTACK pStack);
bool is_empty(PSTACK pStack);
void gettop(PSTACK pStack,int *top);
void getlen_stack(PSTACK pStack,int *len);
void clean_stack(PSTACK pStack);
void destroy_stack(PSTACK pStack);
int main(void)
{
freopen("in.txt","r",stdin);
STACK stack;
init_stack(&stack);
push(&stack);
traverse_stack(&stack);
int top,len;
gettop(&stack,&top);
getlen_stack(&stack,&len);
printf("THE TOP OF THE STACK IS %d\n",top);
printf("THE LEN OF THE STACK IS %d\n",len);
pop(&stack);
gettop(&stack,&top);
getlen_stack(&stack,&len);
printf("THE TOP OF THE STACK IS %d\n",top);
printf("THE LEN OF THE STACK IS %d\n",len);
clean_stack(&stack);
traverse_stack(&stack);
destroy_stack(&stack);
traverse_stack(&stack);
return 0;
fclose(stdin);
}
void init_stack(PSTACK pStack)
{
pStack->top = pStack->bottom = NULL;
}
void push(PSTACK pStack)
{
int val;
while(scanf("%d",&val) && val!= -1){
PNODE p = (PNODE)malloc(sizeof(Node));
p->next = NULL;
p->value = val;
if(pStack->bottom==NULL&&pStack->top==NULL){
pStack->top = pStack->bottom = p;
}else{
p->next = pStack->top;
pStack->top = p;
}
}
}
void traverse_stack(PSTACK pStack)
{
PNODE p = pStack->top;
if(false == is_empty(pStack)){
while(p){
printf("%d\t",p->value);
p = p->next;
}
printf("\n");
}else{
printf("SORRY The stack is empty!\n");
}
}
bool is_empty(PSTACK pStack)
{
if(pStack->top == NULL && pStack->bottom == NULL){
return true;
}else{
return false;
}
}
void gettop(PSTACK pStack,int *top)
{
if(false == is_empty(pStack)){
*top = pStack->top->value;
}else{
printf("SORRY The stack is empty!\n");
}
}
void pop(PSTACK pStack)
{
PNODE p = pStack->top;
pStack->top = p->next;
free(p);
}
void getlen_stack(PSTACK pStack,int *len)
{
PNODE p = pStack->top;
int cnt = 0;
if(false == is_empty(pStack)){
while(p){
cnt++;
p = p->next;
}
*len = cnt;
}else{
printf("SORRY The stack is enpty!\n");
}
}
void clean_stack(PSTACK pStack)
{
PNODE p = pStack->top;
if(false == is_empty(pStack)){
while(p){
p->value = 0;
p= p->next;
}
}else{
printf("SORRY The stack is enpty!\n");
}
}
void destroy_stack(PSTACK pStack)
{
PNODE p = pStack->top;
PNODE q = NULL;
if(false == is_empty(pStack)){
while(p){
p = p->next;
pop(pStack);
}
printf("%d",pStack->bottom->value);
}else{
printf("SORRY The stack is enpty!\n");
}
}
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 《HelloGitHub》第 108 期
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单
· C# 13 中的新增功能实操
· Supergateway:MCP服务器的远程调试与集成工具