天天看点

刚学数据结构,写了个C语言栈的头文件方便新手一块用~

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

继续阅读