棧的順序儲存結構C語言
阿新 • • 發佈:2019-02-08
棧是一種先入後出的資料結構,應用也非常廣泛,例如在電腦中檔案管理裡,點選進入多層檔案裡,然後點返回鍵,又能回到原處。雙擊進入相當於入棧,返回相當於出棧,返回時只能返回到當前級的上一級。
棧的儲存結構與連結串列一樣,有順序儲存結構和鏈式儲存結構,先來談一談順序儲存結構,可以用陣列來實現順序棧,陣列下標為0的一端為棧底,再定義一個變數top,用來指向棧頂元素。所以top的值必須小於陣列的長度,陣列的第一個下標為0,所以top等於0是表示棧只有一個元素。若棧為空,將其判定條件定義為top等於-1。
下面給出順序棧部分功能實現的程式碼:
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 20 /* 儲存空間初始分配量 */
typedef struct{
int data[MAXSIZE];
int top;
}SqStack;
void visit(int c){
printf("%d ", c);
}
void StackTraverse(SqStack S){
int i = 0;
while (i <= S.top){
visit(S.data[i++]);
printf("\n");
}
}
void InitStack(SqStack *S) //初始化操作,建立一個空棧
{
S->top = -1;
}
void ClearStack(SqStack *S) //將棧清空
{
S->top = -1;
}
bool StackEmpty(SqStack S) //判斷棧是否為空
{
if (S.top == -1)
return false;
else
return true;
}
void Top(SqStack S, int *e) //返回棧頂元素
{
if (S.top == -1) //棧為空
exit(0);
else
*e = S.data[S.top];
}
void Push(SqStack *S, int e) //入棧操作
{
if (S->top == MAXSIZE - 1)
exit(0);
else
S->top++;
S->data[S->top] = e;
}
void Pop(SqStack *S, int *e) //出棧操作
{
if (S->top == -1)
exit(0);
else
*e = S->data[S->top];
S->top--;
}
int StackLength(SqStack S){
return S.top + 1;
}
int main(){
SqStack s;
int i=0;
InitStack(&s);
for (i = 0; i < 10; i++){
Push(&s, i);
}
StackTraverse(s);
int e;
Top(s,&e);
printf("%d\n", e);
Pop(&s, &e);
StackTraverse(s);
system("pause");
return 0;
}