数据结构(1)-栈的特性以及简单应用

数据结构-栈
定义:栈是一种先进后出的结构(FIFO)。
基本的概念我就不说了,网上的文章都一大抄, 博主力求原创, 基本的概念大家都可以参考任何一本
数据结构的书籍, 我推荐入门的大话数据结构和严蔚敏,吴伟明的数据结构c语言版, 强力推荐。

栈的两个最重要的操作:
push:栈顶指针上移,将一个元素推入栈中。
pop:将栈顶的元素弹出,栈顶指针下移。
指针的移动顺序在汇编语言中是这样规定的,所以尽量保持本性,当然你也可以把顺序颠倒,自己试试吧。

应用:由于栈的先进后出的特性,可以实现许多目的
1.进制转换
因为进制转换需要先计算的余数最后存放,所以可以利用栈实现。这里只介绍基本的思想

void main()
{
    int num;
    int x;
    printf("请输入要要转换的10进制数:");
    scanf("%d", &num); //假设输入10
    while (num)
    {
        push(num % 2);//压入数据
        num /= 2;//循环 
    }
    while (!isempty())//栈不为空
    {
        printf("%d", pop());//栈弹出数据1010
    }
    system("pause");
}

2.计算逆波兰(后缀)表达式的值
基本思想:从左到右依次遍历字符串,是数字就入栈,是字符就依次弹出两个元素运算,结果入栈。

//先输入字符串表达式,然后依次判断字符,是数字就入栈, 是字符就进行下面的判断
switch (c)
        {
        case '+':
            Pop(&s, &e);
            Pop(&s, &d);
            Push(&s, d + e);
            break;
        case '-':
            Pop(&s, &e);
            Pop(&s, &d);
            Push(&s, d - e);//第一个弹出的数字作为减数
            break;
        case '*':
            Pop(&s, &e);
            Pop(&s, &d);
            Push(&s, d*e);
            break;
        case '/':
            Pop(&s, &e);
            Pop(&s, &d);
            if (e != 0)//判断除数不能为0
            {
                Push(&s, d / e);//第一个弹出的元素作为除数
            }
            else
            {
                printf("\n出错:除数为零!\n");
                return -1;//失败main返回-1
            }
            break;
        }

你可能感兴趣的:(数据结构,C语言,栈)