//浙大數據結構 棧的實現(數組)
#include<stdio.h>
#include<stdlib.h>
#include<crtdbg.h>
#define ERROR NULL;
#define MAXSIZE 10
typedef int Position;
typedef int ElementType;
struct SNode {
ElementType *Data; /* 存儲元素的數組 */
Position Top; /* 棧頂指針 */
int MaxSize; /* 堆棧最大容量 */
};
typedef struct SNode *Stack;
Stack CreateStack(int MaxSize)
{
Stack S = (Stack)malloc(sizeof(struct SNode));
S->Data = (ElementType *)malloc(MaxSize * sizeof(ElementType));
S->Top = -1;
S->MaxSize = MaxSize;
printf("S addr:%p S->Data addr:%p \n", S, S->Data);
return S;
}
bool IsFull(Stack S)
{
return (S->Top == S->MaxSize - 1);
}
bool Push(Stack S, ElementType X)
{
if (IsFull(S)) {
printf("堆棧滿");
return false;
}
else {
S->Data[++(S->Top)] = X;
return true;
}
}
bool IsEmpty(Stack S)
{
return (S->Top == -1);
}
ElementType Pop(Stack S)
{
if (IsEmpty(S)) {
printf("堆棧空");
return ERROR; /* ERROR是ElementType的特殊值,標誌錯誤 */
}
else
return (S->Data[(S->Top)--]);
}
int main()
{
Stack S = CreateStack(MAXSIZE);
Push(S, 1);
Push(S, 2);
Push(S, 3);
Push(S, 4);
printf("top:%d \n", S->Top);
printf("%d \n", Pop(S));
free(S->Data);
free(S);
_CrtDumpMemoryLeaks(); //檢查內存泄漏
system("pause");
return 0;
}