<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;
}