栈的笔记(2)--顺序栈

顺序栈是利用一组地址连续的储存单元依次存放栈顶到栈底的数据元素,同时,还必须附加一个指针top(栈顶指针),来动态储存栈顶元素在顺序战中的位置。(通常,top=-1表示空栈)

储存结构如下:

#define Stack_Size 50//设栈中的元素为50

typedef struct  {

    StackElementType elem[Stack_Size];//用来存放栈中元素的一维数组

     int top;//用来存放栈顶元素的下标,top为-1时,表示栈为空

}SeqStack;

初始化顺序栈

void InitStack(SeqStack *S)

{

   S->top=-1;//构建一个空栈S,栈顶为空

}

进栈(先判断栈是否为满,如果为满,返回FALSE)

int Push(SeqStack *S,StackElementType x)

{    

   if(S->top==Stack_size-1)//栈已满

      return (FALSE);

    S->top++;

     S->elem[S->top]=x;

     return(TRUE);

}

出栈(先判断栈是否为空,若为空,返回FALSE)

int Pop(SeqStack *S,StackElementType *x)

{    

   if(S->top==-1)//栈为空

     return(FALSE);

   else{

    *x=S->elem[S->top];//把栈顶元素放到x所指向的存储空间中

     S->top--;

     return(TRUE);

    }

}

读取栈顶元素(先判断栈是否为空,若为空,返回FALSE)

int GetTop(SeqStack *S,StackElementType *x)

{

    if(S->top==-1)//栈为空

      return(FALSE);

    else   {

        *x=S->elem[S->top];///把栈顶元素放到x所指向的存储空间中

      return(TRUE);   }

}

多栈共享技术  一个程序使用多个栈时,为防止有的栈溢出,可以 让多个栈共用一个足够大的数组。  最常用的是两个栈的共享技术,即双端栈。他主要利用了“栈底位置不变,栈顶位置动态变化”的特性。  首先,申请一个共享的一维数组S[M],将两个栈的栈底,分别放到一维数组的两端,分别为0,M-1

数据结构定义为:

 #define M 100   //假设,两个栈的和用大小为100

  typedef struct  {

    StackElementType Stack[M];

    StackElementType top[2];

   }DqStack;

双端顺序栈初始化

  void InitStack(DqStack *S)

   {

      S->top[0]=-1;

       S->top[1]=M;

  }

双端顺序栈进栈(需先判断栈是否为满)

  int Push(DqStack *S,StackElementType x,int i)

  {

     \\把数据元素装入第i号堆栈

     if(S->top[0]+1==S->top[1])

      return(FALSE);

    switch(i)   {

       case 0:     S->top(0)++;     S->Stack[S->top[0]]=x;     break;

      case 1:     S->top[1]--;     S->Stack[S->top[1]]=x;     break;

      default:     return(FALSE);

       }

      return(TRUE);

}

双端顺序栈出栈

int Pop(DeStack *S,StackElmentType *x,int i)

{

   Switch(i)   {

    case 0:     if(S->top[0]==-1)      return(FALSE);     *x=S->Stack[S->top[0]];     S->top[0]--;     break;

    case 1:     if(S->top[1]==M)      return(FALSE);     *x=S->Stack[S->top[1]];     S->top[1]++;     break;

    default:     return(FALSE);

      }

   return(TRUE);

}

时间: 2024-10-25 09:24:04

栈的笔记(2)--顺序栈的相关文章

数据结构之栈(1)——顺序栈

栈作为一种特殊的线性表,在计算机中有顺序储存结构和链式存储结构两种存储结构,根据这个我们把栈分为顺序栈和链栈 顺序栈 栈顶:用top来动态地表示栈顶元素在顺序栈中的位置,当top=-1时表示栈为空 这个是栈这个数据类型的定义 typedef char ElemTypeStack; typedef struct{ ElemTypeStack elem[MAXSIZE]; int top; }FirStack; 用一个数组来存储数据,对应的下标表示他在栈中的位置,top表示栈顶元素对应的下标,若栈为

数据结构笔记1顺序栈

#include<stdio.h> #include<conio.h>#include<stdlib.h>#define MAX 100typedef struct{ int data[MAX]; int top;}Stack;Stack s;//初始化 成功1int InitStack(Stack s){ s.top=-1; return 1;}//判空 非空1int StackEmpty(Stack s){ if(-1==s.top)  return 0; retu

(001)顺序栈的C++实现

(001)顺序栈的C++实现 2014/12/4     jxlijunhao 这里通过C++模板类来实现一个顺序栈: 1)初始化 2)入栈 3)出栈 4)取栈顶元素 在顺序栈中(一个数组中),操作的总是发生在数组的末尾 定义一个头文件 #ifndef SQ_STACK_H #define SQ_STACK_H #include<iostream> using namespace std; template<class T> class sq_stack { private: in

数据结构(C实现)------- 顺序栈

栈是限定仅在表的一端进行插入或删除的纯属表,通常称允许插入,删除的一端为栈顶(Top),相应在的,则称另一端为栈底(Bottom).不含元素的栈则称为空栈. 所设栈S={a1,a2,a3,...,an},则称a1为栈底元素,an为栈顶元素.根据栈的定义可知,栈顶元素总是最后入栈并且最先出栈的:栈底元素总是最先入栈并且最后出栈的.即栈是按后进先出的原则进行的.因此,栈又称为后进先出(LIFO)的线性表. 而顺序栈,即栈的顺序存储结构.它是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同

顺序栈与链表栈的实现

栈是一种常见的数据结构,它虽然有栈顶和栈底之分,但它只能从一端操作(插入或删除),从而是一种"先进后出"的操作模式.向栈内进数据称为压栈(Push),从栈里取出数据叫出栈(POp).例如压栈顺序为1.2.3.4.5,着出栈的顺序为5.4.3.2.1(只考虑一次性出栈的情况). 栈按照存储的方式,又分为顺序栈和链表栈.顺序栈基于数组实现,所以顺序栈存储数据的内存是连续的,在创建栈时规定好栈的大小,这样对内存的使用效率并不高.而链式栈则是采用了链表来实现,其元素的存储地址是不连续的,而且是

数据结构-顺序栈

1 #include <iostream> 2 #include <stdlib.h> 3 using namespace std; 4 5 #define maxSize 30 6 7 typedef struct 8 { 9 int data[maxSize]; 10 int top; 11 }SqStack; 12 13 void InitStack(SqStack &S) 14 { 15 S.top=-1; 16 } 17 18 int IsEmpty(SqStac

线性表之顺序栈C++实现

线性表之顺序栈 栈是限定仅在表尾(栈顶)进行插入删除操作的线性表,FILO:先进后出 一.顺序栈的头文件:SeqStack.h //顺序栈头文件#include<iostream>using namespace std;//设置顺序栈的大小const int StackSize = 10;template<class DataType>//定义顺序栈的模板类型class SeqStack{public: //无参构造器,初始化栈顶指针 SeqStack(){ top = -1; }

顺序栈的基本操作:初始化、进栈、出栈、读栈顶元素

顺序栈:利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时由于栈操作的特殊性,还必须附设一个位置指针top(栈顶指针)来动态地指示栈顶元素在顺序栈中的位置.通常以top=-1表示空栈. 代码如下: #include<iostream> using namespace std; #define  TRUE 1 #define  FALSE 0 //顺序栈的存储结构 #define Stack_Size 50 //设栈中元素个数为50 typedef struct { int elem

Java数据结构-线性表之栈(顺序栈和链栈)

栈的定义:(特殊的线性表) ??仅在表的一端进行插入和删除的线性表.允许插入.删除的这一端称为栈顶,另一端称为栈底.表中没有元素时称为空栈. ??被称为后进先出的线性表(Last In First Out),简称 LIFO表,或被称为先进后出的线性表(First In Last Out),简称 FILO表. ??栈更具存储方式的不同分为两种:顺序栈和链栈. 顺序栈: 和顺序表一样,顺序栈也采用数组来存放数据元素: 为了保证栈底位置的不变,采用数组下标为0的位置作为顺序栈的栈底. 而栈顶指针的最大

顺序栈的实现和两栈共享空间

顺序栈的实现和两栈共享空间 一.顺序栈的实现 栈(stack)是限定仅在表尾进行插入或删除操作的线性表.我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何 数据元素的栈称为空栈.栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构. 理解栈的定义需要注意: 首先他是一个线性表,也就是说,栈元素具有线性关系,即前驱后继关系.只不过他是一种特殊的线性表而已.定义中说是在线性表的表尾进行插入和删除操作,这里表尾是指栈顶,而不是栈底. 他的