链栈基本代码

初学栈,用链表创建栈的基本代码:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
using namespace std;
typedef struct node
{
    int data;
    struct node *next;
} Node,*LinkList;
LinkList Createzhan()//创建栈
{
    LinkList top;
    top=NULL;
    return top;
}
bool StackEmpty(LinkList s)//判断栈是否为空,1代表空
{
    if(s==NULL)
        return 1;
    else
        return 0;
}
LinkList push(LinkList s,int x)//栈中插入元素
{
    LinkList q,top=s;
    q=(LinkList)malloc(sizeof(Node));
    if(!q) return 0;
    q->data=x;
    q->next=top;
    top=q;
    return top;
}
LinkList pop(LinkList s,int &e)//删除栈顶元素
{
    if(StackEmpty(s))
    {
        printf("栈为空。");
        return s;
    }
    else
    {
        e=s->data;
        LinkList p=s;
        s=s->next;
        free(p);
    }
    return s;
}
void GetTop(LinkList s,int &e)//取得栈顶元素
{
    if(StackEmpty(s))
        printf("栈为空。");
    else
        e=s->data;
}
void TravealPut(LinkList s)//遍历输出栈中元素
{
    if(StackEmpty(s))
        printf("栈为空。");
    else
    {
        while(s!=NULL)
        {
            cout<<s->data<<" ";
            s=s->next;
        }
        cout<<endl;
    }
}
int main()
{
    LinkList top;
    top=Createzhan();
    printf("输入一个放入栈的数据:");
    int x;
    cin>>x;
    top=push(top,x);
    top=push(top,x);
    TravealPut(top);
    int e;
    GetTop(top,e);
    cout<<e<<endl;
    e=0;
    top=pop(top,e);
    cout<<StackEmpty(top)<<endl;
    return 0;
}
是一种基于链表实现的结构,它的基本操作包括初始化、入、出、获取顶元素和判断是否为空。下面是基本操作的源代码示例: ```c++ #include <iostream> // 定义的节点结构 struct Node { int data; // 数据域 Node* next; // 指针域,指向下一个节点 }; // 初始化 void initStack(Node*& top) { top = nullptr; // 将顶指针置为空 } // 入操作 void push(Node*& top, int value) { Node* newNode = new Node; // 创建新节点 newNode->data = value; // 设置新节点的数据域为value newNode->next = top; // 将新节点的next指针指向当前顶节点 top = newNode; // 更新顶指针为新节点 } // 出操作 void pop(Node*& top) { if (top == nullptr) { std::cout << "Stack is empty." << std::endl; return; } Node* temp = top; // 保存当前顶节点的指针 top = top->next; // 更新顶指针为下一个节点 delete temp; // 释放原来的顶节点内存空间 } // 获取顶元素 int getTop(Node* top) { if (top == nullptr) { std::cout << "Stack is empty." << std::endl; return -1; } return top->data; // 返回顶节点的数据域 } // 判断是否为空 bool isEmpty(Node* top) { return top == nullptr; } int main() { Node* top; initStack(top); // 初始化 push(top, 1); // 入元素1 push(top, 2); // 入元素2 push(top, 3); // 入元素3 std::cout << "Top element: " << getTop(top) << std::endl; // 获取顶元素 pop(top); // 出操作 std::cout << "Top element: " << getTop(top) << std::endl; // 获取顶元素 std::cout << "Is stack empty? " << (isEmpty(top) ? "Yes" : "No") << std::endl; // 判断是否为空 return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值