栈结构的学习(转)

本文深入讲解了栈这一重要数据结构的原理与实现细节,包括后进先出(LIFO)原则、核心数据及其操作如判断是否为空、压栈、弹栈等,并通过C语言示例代码演示如何创建和使用栈。

栈是一个很重要的数据结构。其主要的思想为:

1. 栈是一个后进先出的数据结构(last-in, first-out LIFO)。
2. 它的主要操作有“IsEmpty() 判断栈空。Push()插入数据。Pop弹出数据。
3. 它的核心数据为栈顶,栈数据区域。栈顶表示最后一个数据的位置,也表示了栈中数据的个数。这里是有一个int来表示。栈空的时候,栈顶位置为0。要得到栈顶元素,只需要用nData[nTop]就可以了。nData是它的数据区域。
4. 实现的一些细节,下面代码的栈顶的初始值为0,他代表什么数据也没有,压入数据的时候,先把栈顶加1,然后使nData[nTop] = 数据。这样在出栈和得到栈顶元素都很方便。也很方便的得到栈的数据个数。下标为0的空间没有用,浪费了这个空间得到了操作的方便。还有就是注意判断栈是否满了,如果满了还添加的话,栈溢出。也要判断栈如果已经为空了,就不能在弹出(pop)数据了。

 

 

   #include <stdio.h>
#include <stdlib.h>
#include <assert.h>

//定义一个栈的结构体
struct MyStack 
{
    int nTop;        //栈顶位置
    int nData[11];    //栈的数据区域
}
;

MyStack g_stack;

//判断栈是否为空,空返回true
bool IsEmpty()
{
    return !g_stack.nTop;
}


//设置栈为空
int SetEmpty()
{
    g_stack.nTop = 0;
    return 0;
}


//压数据入栈
int Push(int nData)
{
    assert(g_stack.nTop < 10);
    ++g_stack.nTop;
    g_stack.nData[g_stack.nTop] = nData;
    return g_stack.nTop;
}


//得到栈顶的引用
int& GetTop()
{
    assert(g_stack.nTop);
    return g_stack.nData[g_stack.nTop];
}


//弹出栈顶元素,返回弹出的元素。
int Pop(void)
{
    assert(g_stack.nTop);
    --g_stack.nTop;
    return g_stack.nData[g_stack.nTop + 1];
}


int main()
{
    SetEmpty();

    //测试栈
    if (IsEmpty())
    {
        printf("MyStack Is Empty!/n");
    }


    for (int i = 0; i < 10; ++i)
    {
        Push(i);
        printf("%d ", GetTop());
    }

    printf("/n");
    while (!IsEmpty())
    {
        printf("%d ", Pop());
    }

    printf("/n");

    system("pause");
    return 0;
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值