《数据结构》实验四----链栈的基础操作

此博客展示了如何使用C语言实现链栈,包括初始化、判断空栈、进栈、出栈、获取栈顶元素、栈的长度、销毁栈及打印栈中元素等操作。通过示例代码详细阐述了每个函数的功能和用法,并在`main.c`中进行了实际应用演示。
摘要由CSDN通过智能技术生成
/*LinkStack.c*/
#include <stdio.h>
#include <stdlib.h>
#include "LinkStack.h"
#include <windows.h>
void InitStack(LinkStack* top)//栈链初始化
{
    if((*top=(LinkStack)malloc(sizeof(LStackNode)))==NULL)
        exit(0);
    (*top)->next=NULL;
}
int StackEmpty(LinkStack top)//判断链栈是否为空
{
    if(top->next==NULL)
        return 1;
    return 0;
}
void PushStack(LinkStack top,DataType data)//进栈操作
{
    LStackNode *p;
    p=(LStackNode*)malloc(sizeof(LStackNode));
    if(p==NULL)
        printf("内存分配失败\n");
    else
    {
        p->data=data;
        p->next=top->next;
        top->next=p;
    }
}
void PopStack(LinkStack top,DataType *data)//出栈操作
{
    LStackNode *p;
    p=top->next;
    if(p==NULL)
        printf("栈为空\n");
    else
    {
        top->next=p->next;
        *data=p->data;
        free(p);
    }
}
int GetTop(LinkStack top,DataType*data)//取栈顶元素
{
    LStackNode *p;
    p=top->next;
    if(StackEmpty(top))
        printf("栈为空\n");
    else*data=p->data;
    return *data;
}
int StackLength(LinkStack top)//求链栈长度
{
    int count=0;
    LStackNode *p;
    p=top;
    while(p->next!=NULL)
    {
        count++;
        p=p->next;
    }
    return count;
}
void DestoryStack(LinkStack top)//销毁栈链操作
{
    LStackNode *p;
    LStackNode *q;
    p=top;
    while(!p)
    {
        q=p;
        p=p->next;
        free(q);
    }
}
void StackPrint(LinkStack top)//打印栈中元素
{
    LStackNode*p;
    if(StackEmpty(top))
        printf("栈为空\n");
    printf("栈中元素为\n");
    p=top;
    while(p->next!=NULL)
    {
        p=p->next;
        printf("%-3d",p->data);
    }
    printf("\n");
}

/*LinkStack.h*/
#ifndef LINKSTACK_H_INCLUDED
#define LINKSTACK_H_INCLUDED
#include <stdio.h>
#include <stdlib.h>
typedef int DataType;
typedef struct Node
{
    DataType data;
    struct Node*next;
}LStackNode,*LinkStack;
void InitStack(LinkStack* top);//栈链初始化
int StackEmpty(LinkStack top);//判断链栈是否为空
void PushStack(LinkStack top,DataType data);//进栈操作
void PopStack(LinkStack top,DataType *data);//出栈操作
int GetTop(LinkStack top,DataType*data);//取栈顶元素
int StackLength(LinkStack top);//求链栈长度
void DestoryStack(LinkStack top);//销毁栈链操作
void StackPrint(LinkStack top);//打印栈中元素
#endif // LINKSTACK_H_INCLUDED

/*main.c*/
#include <stdio.h>
#include <stdlib.h>
#include "LinkStack.h"
int main()
{
    LinkStack Ls;
    DataType data;
    InitStack(&Ls);
    printf("将1,2,3,4,依次输入栈\n");
    PushStack(Ls,1);
    PushStack(Ls,2);
    PushStack(Ls,3);
    PushStack(Ls,4);
    StackPrint(Ls);
    printf("栈的长度为%d\n",StackLength(Ls));
    printf("栈顶元素为%d\n",GetTop(Ls,&data));
    printf("\n");
    printf("退一次栈\n");
    PopStack(Ls,&data);
    StackPrint(Ls);
    printf("栈的长度为%d\n",StackLength(Ls));
    printf("栈顶元素为%d\n",GetTop(Ls,&data));
    printf("\n");
    printf("将8入栈\n");
    PushStack(Ls,8);
    printf("将8入栈\n");
    PushStack(Ls,8);
    printf("退一次栈\n");
    PopStack(Ls,&data);
    StackPrint(Ls);
    DestoryStack(Ls);
    return 0;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leimingzeOuO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值