常见数据结构C实现之——基于链表的栈

18 篇文章 0 订阅
7 篇文章 0 订阅

定义外部使用的数据类型名

typedef void* LinkStack;

头文件定义

#ifndef LINK_STACK_H
#define LINK_STACK_H
#include "stdlib.h"

typedef void* LinkStack;

//初始化栈
LinkStack initial_LinkStack();
//进桟
void push_LinkStack(LinkStack lStack,void* data);
//返回栈顶元素
void* top_LinkStack(LinkStack lStack);
//弹出栈定元素
void pop_LinkStack(LinkStack lStack);
//是否为空
int empty_LinkStack(LinkStack lStack);
//返回栈大小
int size_LinkStack(LinkStack lStack);
//销毁栈
void destroy_LinkStack(LinkStack lStack);

#endif

头文件实现

#include "CLinkStack.h"
#include "CLinkList.h"

//初始化栈
LinkStack initial_LinkStack()
{
    LinkList list = initial_LinkList();
    return list;
}
//进桟
void push_LinkStack(LinkStack lStack,void* data)
{
    if(lStack == NULL)
    {
        return;
    }

    insert_LinkList(lStack,0,data);
}
//返回栈顶元素
void* top_LinkStack(LinkStack lStack)
{
    if(lStack == NULL)
    {
        return NULL;
    }

    return getItemByPos_LinkList(lStack,0);
}
//弹出栈定元素
void pop_LinkStack(LinkStack lStack)
{
    if(lStack == NULL)
    {
        return;
    }

    delByPos_LinkList(lStack,0);
}

//是否为空
int empty_LinkStack(LinkStack lStack)
{
    if(lStack == NULL)
    {
        return -1;
    }

    int nSize = size_LinkList(lStack);
    if (nSize == 0)
    {
        return 1;
    }
	return 0;
}

//返回栈大小
int size_LinkStack(LinkStack lStack)
{
    if(lStack == NULL)
    {
        return -1;
    }

    return size_LinkList(lStack);
}
//销毁栈
void destroy_LinkStack(LinkStack lStack)
{
    if(lStack == NULL)
    {
        return;
    }

    destroy_LinkList(lStack);
}

测试代码

	struct Person
	{
   	 	void* data;
    	char name[64];
    	int nAge;
	};

	struct Person p1 = {NULL,"张三",12};
    struct Person p2 = {NULL,"李四",15};
    struct Person p3 = {NULL,"王麻子",18};
    struct Person p4 = {NULL,"张五",19};
    struct Person p5 = {NULL,"张飞",22};
	printf("-------------------------------------\n");
    //linkStack
    LinkStack lStack = initial_LinkStack();
    push_LinkStack(lStack,&p5);
    push_LinkStack(lStack,&p4);
    push_LinkStack(lStack,&p3);
    push_LinkStack(lStack,&p2);
    push_LinkStack(lStack,&p1);
    printf("ListStack size:%d\n",size_LinkStack(lStack));
    while(!empty_LinkStack(lStack))
    {
        Person* person = (Person*)top_LinkStack(lStack);
        printf("name:%s,age:%d\n",person->name,person->nAge);
        pop_LinkStack(lStack);
    }
    printf("ListStack size:%d\n",size_LinkStack(lStack));
    destroy_LinkStack(lStack);

    printf("-------------------------------------\n");

测试结果
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值