顺序栈的简单操作

关于顺序栈的简单操作如下, 由于主要介绍思想实现,读者从代码中可以很容易看出很多漏洞。如有错误之处,请大家指正!

点击(此处)折叠或打开

  1. #include<iostream>
  2. using namespace std;
  3. #define MAXSIZE 10

  4.  struct Stack {

  5.     int data[MAXSIZE];
  6.     int top;
  7. };

  8.  Stack *CreateStack();     //该步骤函数声明必须放在结构体后面
  9.  void InitialStack(Stack *);
  10.  void InsertStack(Stack *, int, int);
  11.  void DeleteStack(Stack *, int);
  12.  void PrintStack(Stack *);

  13. Stack *CreateStack() {

  14.     Stack *p = new Stack;  //创建指向栈的指针p
  15.     p->top = -1;           //因为是顺序栈,存储数据放在数组中,为了一致性,top指针置于-1,表明栈为空
  16.     return p;

  17. }

  18. void InitialStack(Stack *p) {

  19.     Stack *head;
  20.     head = p;

  21.     cout << "入栈的顺序是:" << endl;
  22.     
  23.     int MAX_SIZE = MAXSIZE - 1;

  24.     while (head->top != MAX_SIZE - 1) {

  25.         head->top++;   //该步可以省略,下步改为:head->data[++head->top] = head->top;就是赋值与自加的先后顺序
  26.         head->data[head->top] = head->top;
  27.         cout << head->data[head->top] << "--&gt";
  28.     }

  29.     cout << "输出结束";
  30.     cout << endl;
  31.     
  32. }

  33. void InsertStack(Stack *p, int i, int x) {
  34.     
  35.     Stack *q;

  36.     int length = p->top; //这里一定要注意,栈只能从一端进入弹出,要保证top指针不能够被修改
  37.     p->top += 1;         //由于插入一个数据,栈长度+1(更准确的说是数组下标+1)
  38.     q = p;

  39.     int llength = q->top;
  40.     int flag = llength;

  41.     for (int n = 0; n <= flag - i; n++) { //一定要保证变与不变,算法实现,通过图解读者可以清楚知道各参数意义

  42.         q->data[llength--] = q->data[length--]; 
  43.     }

  44.     q->data[i -1] = x;

  45.     
  46. }

  47. void DeleteStack(Stack *p, int i) {

  48.     Stack *q;

  49.     int length = p->top;
  50.     q = p;

  51.     int l = i;
  52.     int j = i - 1;

  53.     for (int n = 0; n <= length - l+1; n++) {

  54.         q->data[j++] = q->data[i++];   //删除操作,对于数组很简单就是覆盖操作
  55.     }

  56.     p->top = p->top - 1;

  57.    
  58. }
  59. void PrintStack(Stack *p) {

  60.     Stack *q;
  61.     q = p;

  62.     cout << "出栈的顺序是:" << endl;

  63.     while (q->top >=0) {

  64.         cout << q->data[q->top--] << "--&gt";
  65.         
  66.     }

  67.     cout << "出栈结束" << endl;
  68. }

  69. int main() {

  70.     Stack *p;

  71.     p = CreateStack();
  72.      InitialStack(p);

  73.    // InsertStack(p, 5, 11);
  74.     //PrintStack(p);

  75.     DeleteStack(p, 5);
  76.     PrintStack(p);
  77. }

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29876893/viewspace-1814693/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29876893/viewspace-1814693/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值