欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

数据结构之栈c语言实现

来源:本站整理 作者:佚名 时间:2016-11-06 TAG: 我要投稿

栈是一种先进后出的数据结构,计算机中常见的函数调用就用到了这种结构,其常用的操作就是出栈、入栈,如下图,数据总是从栈顶入,从栈顶出:
   

    接下来看一个简单的程序将按“abcdef”入栈,并打印其出栈顺序:
#include
#include
#include
 
#define STACK_SIZE        16
#define NAME_MAX_SIZE     32
#define ERR          -1
#define SUCC         0
 
typedef struct stack {
    char *array;   /* 栈的起始地址 */
    int stack_size;    /* 栈大小 */
    int top;   /* 栈顶所在的位置 */
    char(*pop)(struct stack *sta);    /* 出栈 */
    int (*push)(struct stack *sta, char data); /* 入栈 */
} stack_t;
 
static int is_empty(stack_t *sta)
{
    return (sta->top == -1);
}
 
static int is_full(stack_t *sta)
{
    return (sta->top == sta->stack_size-1);
}
 
/* 将栈顶元素出栈,并返回 */
char pop_stack(stack_t *sta)
{
    char ch;
 
    if (is_empty(sta)) {
        printf("the stack is empty \n");
        return ERR;
    }
 
    ch = sta->array[sta->top];
    --sta->top;
 
    return ch;
}
 
/* 在栈顶插入元素 */
int push_stack(stack_t *sta, char data)
{
    if (is_full(sta)) {
        printf("the stack is full \n");
        return ERR;
    }
 
    ++sta->top;
    sta->array[sta->top] = data;
 
    return SUCC;
}
 
void init_stack(stack_t **sta)
{
    *sta = (stack_t *)malloc(sizeof(stack_t));
    if ((*sta) == NULL) {
        printf("no mem \n");
        return ;
    }
 
    (*sta)->top        = -1;
    (*sta)->stack_size = STACK_SIZE;
    (*sta)->pop        = pop_stack;
    (*sta)->push       = push_stack;
    (*sta)->array = (char *)malloc(STACK_SIZE);
    if ((*sta)->array == NULL) {
        printf("no mem \n");
        return ;
    }
}
 
int main(int argc, char *argv[])
{
    int size, ret, i;
    stack_t *sta_addr;
    char data[] = "abcdef";
    
    init_stack(&sta_addr);
    size = sizeof(data) / sizeof(data[0]);
 
    for (i = 0; i
        sta_addr->push(sta_addr, data[i]);
    }
    
    while (1) {
         ret = sta_addr->pop(sta_addr);
         if (ret != ERR) {
            printf("%c,", ret);
         } else {
            break;
         }
    }
 
    return 0;
}
 

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载