栈的链表实现

相信有了前面的基础我们可以很容易的实现栈

需要引入我的链表的list.c和list.h

头文件

//
//  stack.h
//  stack
//
//  Created by bikang on 16/9/9.
//  Copyright (c) 2016年 bikang. All rights reserved.
//

#ifndef __stack__stack__
#define __stack__stack__

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

typedef List Stack;

#define stack_init list_init
#define stack_destroy list_destroy

int stack_push(Stack *stack,const void* data);
int stack_pop(Stack *stack,void** data);

#define stack_peek(stack)((stack)->head == NULL?NULL:((stack)->head->data))

#define stack_size list_size
#endif /* defined(__stack__stack__) */

实现

//
//  stack.c
//  stack
//
//  Created by bikang on 16/9/9.
//  Copyright (c) 2016年 bikang. All rights reserved.
//

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

//入栈
int stack_push(Stack *stack,const void* data){
    return list_ins_next(stack,NULL,data);
}
//出栈
int stack_pop(Stack *stack,void** data){
    return list_rem_next(stack,NULL,data);
}

测试

//
//  main.c
//  stack
//
//  Created by bikang on 16/9/9.
//  Copyright (c) 2016年 bikang. All rights reserved.
//
#include <stdlib.h>
#include <stdio.h>

//#include "list.h"
#include "stack.h"

//测试栈
void testStack();

int main(int argc, const char * argv[]) {
    testStack();
    return 0;
}


void testStack(){
    printf("#####test stack\n");


    Stack *pstack;
    pstack = malloc(sizeof(Stack));
    stack_init(pstack,NULL);

    int *p1 = (int *)malloc(sizeof(int));
    int *p2 = (int *)malloc(sizeof(int));
    int *p3 = (int *)malloc(sizeof(int));
    int i1 = 1;p1 = &i1;
    int i2 = 2;p2 = &i2;
    int i3 = 3;p3 = &i3;

    stack_push(pstack,(void*)p1);
    stack_push(pstack,(void*)p2);
    stack_push(pstack,(void*)p3);
    printf("stack_size=%d\n",stack_size(pstack));
    int *data1 = (int*)malloc(sizeof(int));
    stack_pop(pstack, (void**)&data1);
    printf("pop=%d\n", *data1);

    if(stack_peek(pstack)){
        printf("print top\n");
        printf("top=%d\n",*(int*)stack_peek(pstack));
    }
    stack_destroy(pstack);

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值