浙大數據結構 棧的實現(數組)

//浙大數據結構 棧的實現(數組)
#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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章