#define MAXSIZE 100
typedef int SElemType; // 元素型別,可依需求修改
typedef struct {
SElemType data[MAXSIZE];
int top; // 堆疊頂指標,-1 表示空
} SqStack;
Status InitStack(SqStack *S) {
S->top = -1;
return OK;
}
Status ClearStack(SqStack *S) {
S->top = -1;
return OK;
}
Status StackEmpty(SqStack S) {
return S.top == -1 ? TRUE : FALSE;
}
int StackLength(SqStack S) {
return S.top + 1;
}
Status GetTop(SqStack S, SElemType *e) {
if (S.top == -1) return ERROR;
*e = S.data[S.top];
return OK;
}
Status Push(SqStack *S, SElemType e) {
if (S->top == MAXSIZE - 1) return ERROR; // 堆疊滿
S->data[++S->top] = e;
return OK;
}
Status Pop(SqStack *S, SElemType *e) {
if (S->top == -1) return ERROR;
*e = S->data[S->top--];
return OK;
}
Status StackTraverse(SqStack S) {
for (int i = 0; i <= S.top; i++)
visit(S.data[i]);
printf("\n");
return OK;
}
Status visit(SElemType c) { printf("%d ", c); return OK; }
| 操作 | 時間複雜度 | 備註 |
|---|---|---|
| Push/Pop/GetTop | O(1) | |
| StackEmpty/Length | O(1) | |
| Traverse | O(n) | |
| 空間複雜度 | O(MAXSIZE) | 固定大小,可能浪費或溢位 |
data 改為指標,Push 滿時 realloc 擴大 2 倍。void* data + 元素大小參數,配合函式指標複製/比較/銷毀。top 與 data。參考《大話資料結構》。