• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

栈的C语言实现(原创)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

使用单链表实现的栈,源码用C语言编写,VC6.0编译,分为三个文件,cstack.h是栈的数据结构和函数接口声明,cstack.c是栈的函数的定义,main.c是栈的测试文件。

/*
* File: cstack.h
* Purpose: implementation of stack in c
* Author: puresky
*/

#ifndef _C_STACK_H
#define _C_STACK_H

typedef struct StackNodeStruct StackNode;
struct StackNodeStruct
{
      void *_data;
      struct StackNodeStruct *_next;
};

typedef struct StackStruct Stack;
struct StackStruct
{
      StackNode *_top;
      int _count;
};

Stack *stack_new();
void stack_free(Stack *st);
void stack_push(Stack *st, void *data);
void *stack_top(Stack *st);
void *stack_pop(Stack *st);
int stack_size(Stack *st);
int stack_empty(Stack *st);
#endif

 

/*
* File: cstack.c
* Purpose: implementation of stack in c
* Author: puresky
*/

#include <stdlib.h>
#include "cstack.h"

StackNode *stack_node_new(void *data)
{
      StackNode *stn = (StackNode *)malloc(sizeof(StackNode));
      stn->_data = data;
      stn->_next = NULL;
      return stn;
}
void stack_node_free(StackNode *stn)
{
      if(stn)
      {
            free(stn);
      }
}

Stack *stack_new()
{
      Stack *st = (Stack *)malloc(sizeof(Stack));
      st->_count = 0;
      st->_top = NULL;
      return st;
}
void stack_free(Stack *st)
{
      StackNode *stn;
      StackNode *iter;
      if(st)
      {
            iter = st->_top;
            while(iter)
            {
                  stn = iter;
                  iter = iter->_next;
                  stack_node_free(stn);
            }
      }
}

void stack_push(Stack *st, void *data)
{
      StackNode *stn = stack_node_new(data);
      stn->_next = st->_top;
      st->_top = stn;
      st->_count++;
}

void *stack_top(Stack *st)
{
      return st->_top->_data;
}

void *stack_pop(Stack *st)
{
      void *ret = NULL;
      StackNode *stn;
      if(st->_top)
      {
            ret = st->_top->_data;
            stn = st->_top;
            st->_top = st->_top->_next;
            stack_node_free(stn);
            st->_count--;
      }
     
      return ret;
}

int stack_size(Stack *st)
{
      return st->_count;
}

int stack_empty(Stack *st)
{
      if(st->_top == NULL)
            return 1;
      return 0;
}

/*
* File: main.c
* Purpose: To test the stack
* Author: puresky
*/

#include <stdio.h>
#include <stdlib.h>
#include "cstack.h"

int main(int argc, char **argv)
{
      int data;
      Stack *st = stack_new();
      stack_push(st, (void *)1);
      stack_push(st, (void *)3);
      stack_push(st, (void *)5);
      stack_pop(st);
      stack_push(st, (void *)7);
      stack_push(st, (void *)9);
      stack_push(st, (void *)11);
      printf("size:%d\n", stack_size(st));
      while(!stack_empty(st))
      {
            data = (int)stack_top(st);
            printf("%d\n", data);
            stack_pop(st);
      }
      stack_free(st);
     
      system("pause");
      return 0;
}

鲜花

握手

雷人

路过

鸡蛋
专题导读
上一篇:
一张图弄明白TCP的连接和关闭发布时间:2022-05-14
下一篇:
队列的C语言实现(原创)发布时间:2022-05-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap