ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

共享栈的实现以及基本功能

2021-09-16 22:03:40  阅读:169  来源: 互联网

标签:实现 top elem value int 基本功能 push 共享 Dq


1、共享栈的实现以及基本功能



/**
 *   共享栈的实现以及基本功能
 *   共享栈主要是为了节约内存,但是我们一般只用两个栈共享,多的话其实用的比较多的是链式共享栈,下节我们讲
 *
 */

#include <stdio.h>
#include <mm_malloc.h>

#define MAXSIZE 50
#define OK 1
#define ERROR -1

typedef struct DqStack{

    char elem[MAXSIZE];
    int top[];  // top[0]、top[1]分别代表着两个不同的栈的“指针”

}DqStack,*Dq;


int main(){

    Dq init();
    int push(Dq s,int x,char value);
    int pop(Dq s,int x,char *value);
    int getValue(Dq s,int x,char *value);
    void display(Dq s);

    Dq s = init();
    int value = 0;
    push(s,0,'1');
    push(s,0,'2');
    push(s,0,'3');
    push(s,0,'4');

    pop(s,0,&value);
    printf("出栈的值:%c\n",value);

    push(s,1,'a');
    push(s,1,'b');
    push(s,1,'c');
    push(s,1,'d');

    pop(s,1,&value);
    printf("出栈的值:%c\n",value);
    display(s);
}
 //初始化共享栈
  Dq init(){

         Dq s = (DqStack *)malloc(sizeof( DqStack));
         s->top[0] = -1;
         s->top[1] = MAXSIZE;
      return s;


}

//压栈  x = 0,表示插入到左边的栈, x = 1,表示插入到右边的栈
  int push(Dq s,int x,char value){

      if ((s->top[0]+1) == s->top[1]){
                  printf("栈已满!\n");
      }

    switch (x) {

          case 0:
              s->top[0]++;
              s->elem[s->top[0]] = value;
                break;
          case 1:
              s->top[1]--;
              s->elem[s->top[1]] = value;
              break;
          default:
              return ERROR;
              break;
    }
    return OK;
      }

//弹栈  x = 0,表示插入到左边的栈, x = 1,表示插入到右边的栈  value记录要出栈的值
int pop(Dq s,int x,char *value){

    switch (x) {

        case 0:
            if (s->top[0] == -1){
                 printf("左边的栈已满\n");
                return ERROR;
            }
           *value = s->elem[s->top[0]];
            s->top[0]--;
            break;
        case 1:
            if (s->top[0] == -1){
                printf("右边的栈已满\n");
                return ERROR;
            }

            *value = s->elem[s->top[1]];
            s->top[1]++;
            break;
        default:
            return  ERROR;
            break;

    }
    return OK;

}

//得到栈顶元素
//弹栈  x = 0,表示插入到左边的栈, x = 1,表示插入到右边的栈  value记录要出栈的值
int getValue(Dq s,int x,char *value){

    switch (x) {

        case 0:
            *value = s->elem[s->top[0]];
            break;
        case 1:
            *value = s->elem[s->top[1]];
            break;
        default:
            break;
    }

}

//遍历
void display(Dq s){
    for (int i = 0; i <= s->top[0]; ++i) {
           printf("%c\t",s->elem[i]);
    }

     printf("\n");

    for (int i = MAXSIZE-1; i >= s->top[1]; i--) {
        printf("%c\t",s->elem[i]);
    }
}


标签:实现,top,elem,value,int,基本功能,push,共享,Dq
来源: https://blog.csdn.net/qq_50504109/article/details/120338587

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有