鱼C论坛

 找回密码
 立即注册
查看: 3099|回复: 0

[学习笔记] 《数据结构与算法》——栈

[复制链接]
发表于 2017-7-29 16:32:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

1.栈是一种特殊的链表,与普通链表相比,栈只能先进后出,也就是栈只能对表的尾部进行操作。eg.  1->2->3->4,我们只能对4进行操作,如压入一个新的元素5到4的后面变成
1->2->3->4->5或者弹出4变成1->2->3.这种特定的操作方法有利于在一些情境下对链表的维护和操作
2.指针相减是指针指向的元素相减
3.栈的压入是向top指针当前指向的位置(top指针指向的位置一般为空)赋值,然后top指针移动到下一个位置
4.栈的弹出和删除不同,栈的弹出是用top指针的移动实现的,并不改变内存,删除需要释放内存

附上用栈实现二进制转换为十进制的代码:
  1. #include<cstdio>
  2. #include<cstdlib>
  3. #include<math.h>
  4. #include<iostream>
  5. using namespace std;

  6. class stack
  7. {
  8. public:
  9.         char *top,*base;
  10.         int stack_size;
  11. }s;

  12. void Initial()
  13. {
  14.         s.base = new char[1000];
  15.         s.top = s.base;
  16. }


  17. int Two_to_ten()
  18. {
  19.         int ans=0,i=0;
  20.         while (s.base != s.top)
  21.         {
  22.                 s.base--;
  23.                 int x = *s.base - '0';
  24.                 ans += x*pow(2, i++);
  25.         }
  26.         return ans;
  27. }

  28. void Push(char e)
  29. {
  30.         *s.base = e;
  31.         s.base++;
  32.         s.stack_size++;
  33. }

  34. void Pop()
  35. {
  36.         s.stack_size--;
  37.         s.base--;
  38.        
  39. }


  40. int main()
  41. {
  42.         char c;
  43.         Initial();
  44.         cout << "输入二进制字符串:";
  45.         cin >> c;
  46.         for (int i = 1; c != '.'; i++)
  47.         {
  48.                 Push(c);
  49.                 cin >> c;
  50.         }
  51.         cout << "栈容量为:" << s.stack_size << endl;
  52.         int ans;
  53.         ans = Two_to_ten();
  54.         cout << "十进制数为:" << ans << endl;
  55.        
  56. }
复制代码

评分

参与人数 1鱼币 +3 收起 理由
小甲鱼 + 3

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 18:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表