设为首页 加入收藏

TOP

C++栈学习――顺序栈和链栈的区别
2015-11-21 01:34:27 来源: 作者: 【 】 浏览:0
Tags:学习 顺序 区别
C++中栈有顺序栈和链栈之分,在顺序栈中,定义了栈的栈底指针(存储空间首地址base)、栈顶指针top以及顺序存储空间的大小stacksize(个人感觉这个数据成员是可以不用定义的)
//顺序栈数据结构C++类声明(基类)
template 
   
     class SqStack { public: void clear(); //把顺序栈置空 int getLength(); //求顺序栈中元素个数 int getstackSize(); //返回当前已分配的存储空间的大小 Status getTop(ElemType & e); //读栈顶的元素 bool isEmpty(); //判断顺序栈是否为空 SqStack
    
      operator =(SqStack
     
       rightS); //重载赋值运算符的定义 Status pop(ElemType & e); //弹出栈顶元素到e void push(ElemType & e ); //在栈顶压入元素e //*****************************下面为
      系统自动调用构造函数及析构函数声明******************************// SqStack(); //顺序栈构造函数 virtual ~SqStack();//顺序栈析构函数 SqStack (const SqStack
      
       & otherS);//顺序栈拷贝初始换构造函数 protected: ElemType *base; ElemType *top; int stackSize;//顺序存储空间的大小 };
      
     
    
   
而对于链栈来说,它只定义栈顶指针。
template
    
      class Linkstack { private: class LinkNode { public: ElemType data; LinkNode *next; }; typedef LinkNode * NodePointer; public: void clear(); int getlength(); void display(); void randLinkStack(); Linkstack 
     
       operator = (Linkstack 
      
        rightS); protected: NodePointer top; };
      
     
    

其实这二者的区别是由顺序表和链表的存储结构决定的,在空间上,顺序表是静态分配的,而链表则是动态分配的;就存储密度来说:顺序表等于1,而链式表小于1,但是链式表可以将很多零碎的空间利用起来;顺序表查找方便,链式表插入和删除时很方便。
顺序表的这种静态存储的方式,决定了必须至少得有首地址和末地址来决定一个空间,否则,不知道查找到哪了;链式表每个节点存储了下一个节点的指针信息,故,对于链栈来说,只需要一个top指针即可查找到整个栈。
另外,顺序栈和链栈的top指针有区别,顺序栈的top指针指向栈定的空元素处,top-1才指向栈定元素,而链栈的top指针相当于链表的head指针一样,指向实实在在的元素。
另外附自己写的顺序栈和链栈的随机产生函数:

//顺序栈: template
     
       void MyStack
      
       ::RandStack() { int *p; ElemType n; ElemType Elem[11]; srand(time(NULL)); n=rand()%10+1; cout<<"产生的随机栈的深度为:"<
       
         void MyStack
        
         ::display() { int n=top-base; cout<<"当前栈为:"<
         
          ::display() { NodePointer r; int num=0; r=top; while (r) { cout<
          
           data<<" "; r=r->next; num++; } cout<
           
             void Linkstack
            
             ::randLinkStack() { ElemType elem[11]; srand(unsigned(time(NULL))); int n; n=rand()%10+1; cout<<"the number of the stack is:"<
             
              data=elem[i]; s->next=p; p=s; } top=p; cout<<"the stack produced is:"<
              
               data<<" "; r=r->next; num++; } cout<
              
             
            
           
          
         
        
       
      
     
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇一次数据库相关操作卡住的排查--e.. 下一篇SQLServer中比较末尾带有空格的字..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: