ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 顺序栈的简单操作

顺序栈的简单操作

原创 Linux操作系统 作者:Diy_os 时间:2015-10-17 18:35:48 0 删除 编辑
关于顺序栈的简单操作如下, 由于主要介绍思想实现,读者从代码中可以很容易看出很多漏洞。如有错误之处,请大家指正!

点击(此处)折叠或打开

  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] << "-->";
  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--] << "-->";
  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博客 ” ,链接:https://blog.itpub.net/29876893/viewspace-1814693/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-12-11

  • 博文量
    159
  • 访问量
    1043881