順序棧,兩棧共享空間,鏈棧

2021-07-10 10:11:26 字數 1640 閱讀 5145

棧是一種特殊的線性表,線性表的順序儲存結構和鏈式儲存結構同樣適用於棧。lifo

應用:瀏覽網頁時的撤銷回退操作

#include #include using namespace std;

#define maxsize 1000

typedef int selemtype;

typedef struct

sqstack;

void push(sqstack *s,selemtype e)

else

}void pop(sqstack *s)

else

}int getstacktop(sqstack *s)

int main()

}while(a!=4);

return 0;

}

順序棧儲存空間的大小需要事先申請,不方便。

可以兩棧共享空間,不過這種情況適用於乙個棧的大小不斷增大,另乙個棧的大小不斷減小。而且必須兩棧儲存相同資料型別的元素。例如:(買彩票)

#include #include using namespace std;

#define maxsize 10

typedef int selemtype;

typedef struct

sqdoublestack;

void push(sqdoublestack *s,int stacknumber,selemtype e)

else

if(stacknumber==2)

}}int pop(sqdoublestack *s,int stacknumber)

else

}if(stacknumber==2)

else

}return e;

}void output(sqdoublestack *s)

}int main()

}while(i!=4);

return 0;

}

鏈式儲存結構頭頭指標,棧有指向棧頂的指標,可以將二者合二為一,不需要頭結點;

#include #include #include using namespace std;

typedef int selemtype;

typedef struct stacknode

stacknode,*linkstackptr;

typedef struct linkstack

linkstack;

void push(linkstack *s,selemtype e)

int pop(linkstack *s)

else

return e;

}int main()

}while(i!=3);

return 0;

}

兩者的push和pop操作時間複雜度都為o(1);

順序棧需要事先確定儲存空間的大小,容易造成空間的浪費。但是在訪問時定位很方便。

鏈棧的每個節點都需要乙個指標域,需要額外的記憶體開銷,不過可以動態的申請和釋放空間。

如果棧的大小可以事先**,可以選擇順序棧。反之,可以選擇鏈棧。

遞迴

棧 兩棧共享空間

對於乙個棧,我們只能盡量考慮周全,設計出合適大小的陣列處理。但是,對於兩個相同型別的棧,我們卻可以做到最大限度地利用其事先開闢的儲存空間進行操作。我們可以用乙個陣列來儲存兩個棧,只不過需要一點小技巧。陣列有兩個端點,兩個棧有兩個棧底,讓乙個棧的棧底為陣列的始端,即下標為0處。另乙個棧的棧底為陣列的末...

棧(順序棧,多棧共享技術,動態順序棧,鏈棧)

include include define stacksize 10 建立 typedef struct seqstack seqstack 初始化 void initstack seqstack s 入棧 int push seqstack s,int elem s top s elem s t...

兩棧共享空間

include include include define ok 1 define error 0 define maxsize 20 typedef int selemtype typedef int status typedef struct sqdoublestack 雙頭棧的初始化 sta...