<span style="font-family: Arial, Helvetica, sans-serif;">基于CSDN一位大牛的頭檔案結構寫出來的。本人新手,可能有Bug。</span>
/* 資料類型定義 */
#define Stack_size 25
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int data[Stack_size] ;
int top;
} Stack ;
/* 接口函數聲明 */
/* 操作: 初始化一個棧 */
/* 操作前: pstack 指向一個棧 */
/* 操作後: 如果記憶體配置設定成功, 該棧被初始化并被置為空, 傳回1; 否則傳回0 */
/* 時間複雜度: O(1) */
int InitStack (Stack ** pstack)
{
*pstack=NULL;
*pstack=(Stack *)malloc(sizeof(Stack));
if(*pstack==NULL)
{
return 0;
}
(*pstack)->top=-1;
return 1;
}
/* 操作: 确定一個棧是否為空 */
/* 操作前: pstack 指向一個已初始化的棧 */
/* 操作後: 如果棧為空, 傳回1; 否則傳回0 */
/* 時間複雜度: O(1) */
int IsEmpty (Stack * pstack)
{
if(pstack->top == -1)
return 1;
else
return 0;
}
/* 操作: 将一個元素入棧 */
/* 操作前: pstack 指向一個已初始化的棧, panme 指向入棧的元素的資料 */
/* 操作後: 如果記憶體配置設定成功, 元素資料域為 *pname 的元素入棧, 傳回1; 否則傳回0 */
/* 時間複雜度: O(1) */
int Push (Stack * pstack, int num)
{
if(pstack->top>Stack_size)
{
printf("Push Error!");
return 0;
}
pstack->top++;
pstack->data[pstack->top]=num;
return 0;
}
/* 操作: 從棧中彈出一個元素 */
/* 操作前: pstack 指向一個已初始化的棧, pname 指向一個元素資料域的資料 */
/* 操作後: 如果棧不為空, 棧頂元素出棧并且 *panme 被指派, 傳回1; 否則傳回0 */
/* 時間複雜度: O(1) */
int Pop (Stack * pstack, int * pname)
{
if(pstack->top<0)
{
return 0;
}
* pname = pstack->data[pstack->top];
pstack->top--;
return 1;
}
用以下代碼調試通過:
#include <stdio.h>
#include <stdlib.h>
#include "stack.h"
int main()
{
Stack *ss;
if(InitStack(&ss))
printf("Initialized OK!\n");
if(IsEmpty(ss))
printf("True!\n");
int e=1234;
Push(ss,e);
Pop(ss,&e);
printf("%d",e);
return 0;
}