(数据结构)栈

,是一种线性存储结构。

特点:1.栈中数据是按照“后进先出”的顺序进出栈的。

            2.向栈中添加/删除数据时,只能从栈顶进行操作。

栈通常包括三种操作:push、peek、pop

push:向栈中添加元素。

peek:返回栈顶元素。

pop:返回并删除栈顶元素的操作。

栈的c语言实现:数组实现的栈,并且只能存储int数据。

#include <stdio.h>
#include <malloc.h>

/**
 * C 语言: 数组实现的栈,只能存储int数据。
 *
 * @author skywang
 * @date 2013/11/07
 */

// 保存数据的数组
static int *arr=NULL;
// 栈的实际大小
static int count;

// 创建“栈”,默认大小是12
int create_array_stack(int sz) 
{
    arr = (int *)malloc(sz*sizeof(int));
    if (!arr) 
    {
        printf("arr malloc error!");
        return -1;
    }

    return 0;
}

// 销毁“栈”
int destroy_array_stack() 
{
    if (arr) 
    {
        free(arr);
        arr = NULL;
    }

    return 0;
}

// 将val添加到栈中
void push(int val) 
{
    arr[count++] = val;
}

// 返回“栈顶元素值”
int peek() 
{
    return arr[count-1];
}

// 返回“栈顶元素值”,并删除“栈顶元素”
int pop() 
{
    int ret = arr[count-1];
    count--;
    return ret;
}

// 返回“栈”的大小
int size() 
{
    return count;
}

// 返回“栈”是否为空
int is_empty()
{
    return size()==0;
}

// 打印“栈”
void print_array_stack()
{
    if (is_empty()) 
    {
        printf("stack is Empty\n");
        return ;
    }

    printf("stack size()=%d\n", size());

    int i=size()-1;
    while (i>=0)
    {
        printf("%d\n", arr[i]);
        i--;
    }
}


void main() 
{
    int tmp=0;

    // 创建“栈”
    create_array_stack(12);

    // 将10, 20, 30 依次推入栈中
    push(10);
    push(20);
    push(30);

    //print_array_stack();    // 打印栈


    // 只将“栈顶”赋值给tmp,不删除该元素.
    tmp = peek();
    printf("tmp=%d\n", tmp);
    //print_array_stack();    // 打印栈


    // 将“栈顶元素”赋值给tmp,并删除“栈顶元素”
    tmp = pop();
    printf("tmp=%d\n", tmp);
    //print_array_stack();    // 打印栈

    
    push(40);
    print_array_stack();    // 打印栈

    // 销毁栈
    destroy_array_stack();
}

运行结果

tmp=30
tmp=20
stack size()=3
40
20
10

解释:main函数中,先将“10,20,30”依次压入栈,此时栈的数据是:30-->20-->10

下一步,通过peek()返回栈顶元素,peek()操作不会改变栈中的数据:30-->20-->10

下一步,通过pop()返回并删除栈顶元素,pop()操作后,栈的数据:20-->10

最后push(40)将40压入栈中,栈的数据:40-->20-->10

猜你喜欢

转载自blog.csdn.net/niuyuce/article/details/84951782