现在的位置: 首页 > 综合 > 正文

数据结构 学习笔记之:顺序栈的C语言实现

2013年09月16日 ⁄ 综合 ⁄ 共 1736字 ⁄ 字号 评论关闭
//////////////////////////////////////////////////////////////////////////////////
更多原创“uC/OS-II学习笔记之:系列”基础及嵌入式相关知识详解,请访问可乐虎博客:
相信不会让您失望!!
//////////////////////////////////////////////////////////////////////////////////
//写篇顺序栈,与大家共勉!
//不足错误之处,望指教!
#include <stdio.h>
#include <math.h>
#include <stdlib.h> 

#define TRUE  1
#define FALSE 0
#define STACK_SIZE 5
typedef int ElementType; 

//定义结构体
typedef struct SeqStack 
{
    ElementType array[STACK_SIZE];
    ElementType top;
}SEQSTACK; 

//初始化顺序栈
bool InitStack(SEQSTACK *pS)
{
    if (!pS)//内存分配失败
    {
        return FALSE;
    }
    pS->top = -1;
    
    return TRUE;
}

//判断是否为空
bool IsEmpty(SEQSTACK *pS)
{
    if (pS->top < 0)
    {
        return TRUE;
    }
    else 
    {
        return FALSE;
    }
}

//判断是否为满
bool IsFull(SEQSTACK *pS)
{
    if (pS->top == STACK_SIZE-1)
    {
        return TRUE;
    }
    else
    {
        return FALSE;
    }
}

//压栈(入栈)
bool PushStack(SEQSTACK *pS, ElementType element)
{
    if (IsFull(pS))
    {
        return FALSE;
    }
    pS->top++;
    pS->array[pS->top] = element;
    
    return TRUE;
}

//出栈
ElementType PopStack(SEQSTACK *pS)
{
    ElementType element;

    if (IsEmpty(pS))
    {
        return FALSE;
    }
    element = pS->array[pS->top];
    pS->top--;
    printf("element=%d\n", element);

    return element;
}

//获取栈顶元素
ElementType GetTop(SEQSTACK *pS)
{
    ElementType element;
    
    if (IsEmpty(pS))
    {
        return FALSE;
    }
    element = pS->array[pS->top];
    printf("element=%d\n", element);
    
    return element;
}

//置空顺序栈
void SetEmpty(SEQSTACK *pS)
{
    pS->top = -1;
    
    return;
}

//遍历顺序栈
bool TraStack(SEQSTACK *pS)
{
    ElementType element;
    
	if (IsEmpty(pS))
    {
        return FALSE;
    }
    while (pS->top > -1)
    {
        element = pS->array[pS->top];
        pS->top--;
	    printf("element=%d\n", element);
    }

    return TRUE;
}

//主函数
int main(void)
{
    SEQSTACK *pS;//定义一个指向结构体变量的指针	
    pS = (SEQSTACK *)malloc(sizeof(SEQSTACK));
    //下面函数的参数使用p和&pS是等效的
    InitStack(pS);//初始化

    PushStack(pS, 1);//压栈
    PushStack(pS, 2);
    PushStack(pS, 3);
    PushStack(pS, 4);
    PushStack(pS, 5);

    GetTop(pS);//取栈顶元素
    printf("\n");
    PopStack(pS);//出栈	
    printf("\n");
    TraStack(pS);//遍历栈

    free(pS);//释放pS所占内存空间

    return 0;
}

 

抱歉!评论已关闭.