1. 程式人生 > >棧的順序儲存結構C語言

棧的順序儲存結構C語言

棧是一種先入後出的資料結構,應用也非常廣泛,例如在電腦中檔案管理裡,點選進入多層檔案裡,然後點返回鍵,又能回到原處。雙擊進入相當於入棧,返回相當於出棧,返回時只能返回到當前級的上一級。
棧的儲存結構與連結串列一樣,有順序儲存結構和鏈式儲存結構,先來談一談順序儲存結構,可以用陣列來實現順序棧,陣列下標為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; }