您好,登錄后才能下訂單哦!
本篇內容主要講解“C語言怎么實現順序棧”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C語言怎么實現順序棧”吧!
首先,我們先來簡單了解一下順序棧,前面線性表我們知道,根據順序存儲或者鏈式存儲分為順序表和單鏈表,同樣的,根據存儲方式的不同,我們把棧分為順序存儲的棧稱為順序棧,鏈式存儲的棧稱為鏈棧。我們要講的就是順序棧。實際上,有了前面線性表的一些知識后,關于棧的操作我們還是比較容易理解的。
問題來了?我們怎么去定義呢?通常我們可以用一個數組和記錄棧頂元素位置的變量組成,棧頂位置用整型變量Top記錄當前棧頂元素的下標值。當Top==-1時,表示空棧。當top==MAXSIZE-1時,表示滿棧。好了,下面開始實現順序棧。
1.宏定義及其重命名
#define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 20 /* 存儲空間初始分配量 */ typedef int Status; typedef int SElemType; /* SElemType類型根據實際情況而定,這里假設為int */
2.結構體(順序棧的表示方式)
/* 順序棧結構 */ typedef struct { SElemType data[MAXSIZE]; int top; /* 用于棧頂指針 */ }SqStack;
1.初始化
/* 構造一個空棧S */ Status InitStack(SqStack *S) { /* S.data=(SElemType *)malloc(MAXSIZE*sizeof(SElemType)); */ S->top=-1; return OK; }
2.清空
/* 把S置為空棧 */ Status ClearStack(SqStack *S) { S->top=-1; return OK; }
3.判斷是否為空
/* 若棧S為空棧,則返回TRUE,否則返回FALSE */ Status StackEmpty(SqStack S) { if (S.top==-1) return TRUE; else return FALSE; }
4.求長度
/* 返回S的元素個數,即棧的長度 */ int StackLength(SqStack S) { return S.top+1; }
5.求棧頂元素
/* 若棧不空,則用e返回S的棧頂元素,并返回OK;否則返回ERROR */ Status GetTop(SqStack S, SElemType* e) { if (S.top == -1) { return ERROR; } else { *e = S.data[S.top]; return OK; } }
6.入棧(判斷是否滿了)
/* 插入元素e為新的棧頂元素 */ Status Push(SqStack* S, SElemType e) { if (S->top == MAXSIZE - 1) /* 棧滿 */ { return ERROR; } S->top++; /* 棧頂指針增加一 */ S->data[S->top] = e; /* 將新插入元素賦值給棧頂空間 */ return OK; }
7.出棧(判斷是否為空)
/* 若棧不空,則刪除S的棧頂元素,用e返回其值,并返回OK;否則返回ERROR */ Status Pop(SqStack* S, SElemType* e) { if (S->top == -1) return ERROR; *e = S->data[S->top]; /* 將要刪除的棧頂元素賦值給e */ S->top--; /* 棧頂指針減一 */ return OK; }
8.遍歷
/* 從棧底到棧頂依次對棧中每個元素顯示 */ Status StackTraverse(SqStack S) { int i; i = 0; while (i <= S.top) { visit(S.data[i++]); } printf("\n"); return OK; } Status visit(SElemType c) { printf("%d ", c); return OK; }
主函數
int main() { int j; SqStack s; int e; if (InitStack(&s) == OK) for (j = 1; j <= 10; j++) Push(&s, j); printf("棧中元素依次為:"); StackTraverse(s); Pop(&s, &e); printf("彈出的棧頂元素 e=%d\n", e); printf("棧空否:%d(1:空 0:否)\n", StackEmpty(s)); GetTop(s, &e); printf("棧頂元素 e=%d 棧的長度為%d\n", e, StackLength(s)); ClearStack(&s); printf("清空棧后,棧空否:%d(1:空 0:否)\n", StackEmpty(s)); return 0; }
到此,相信大家對“C語言怎么實現順序棧”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。