1. 程式人生 > >數據結構之棧

數據結構之棧

class 個數 urn nbsp bottom height enter isp 頭指針

棧的基本概念

定義:棧(Stack) 是限制僅在表的一端進行插入和刪除操作的線性表。

  允許進行插入和刪除的一端稱為棧頂(top)

  不允許插入和刪除的一端稱為棧底(bottom)

  不含元素的棧稱為空棧

  往棧中存入元素稱為入棧

  從棧中刪除元素稱為出棧

特點:後進先出(LIFO)或先進後出(FILO)

技術分享

技術分享

技術分享

順序棧的類型說明:

//順序棧的類型說明:


#define  MAXSIZE  100  
typedef  struct
{
    int  data[MAXSIZE];
    int  top;
}SqStack;

雙向棧:

//雙向棧


//為了充分利用棧的空間,采用多個棧共享同一空間。 //雙向棧用一個大數組表示。 //兩個棧共享一個數組的數據結構定義如下: #define MAX 100 typedef struct { int data[MAX]; int top1,top2; }SStack2;

鏈棧

   棧的鏈式存儲結構稱為鏈棧,它是運算受限的單鏈表,其插入和刪除操作僅限制在表頭位置上進行.

   由於只能在鏈表頭部進行操作,故鏈表沒有必要像單鏈表那樣附加頭結點。棧頂指針就是鏈表的頭指針。

其類型說明為:

//鏈棧

typedef  struct  SNode
{
      int  data;
      
struct SNode *next; }SNode,*LinkStack; LinkStack *top;

(1) 初始化棧 top=NULL;

(2) 判斷空棧 top==NULL;

(3)取棧頂 top–>data;

(4)入棧:

void push(PSTACK S,int val)
{
    PNODE pNew=(PNODE)malloc(sizeof(NODE));
    if(pNew==NULL)
    {
        printf("分配失敗程序終止");
        exit(-1); 
    }
    else
    {
        pNew
->data=val; pNew->pNext=S->pTop; S->pTop=pNew; } }

(5)出棧:

bool pop(PSTACK S,int* val)
{
    if(empty(S))
    {
        return false;
    }
    else
    {
        PNODE p=S->pTop;
        *val=p->data;
        S->pTop=p->pNext;
        free(p);
        p=NULL;
        return true;
    }
}

技術分享

數據結構之棧