栈 ------ 知识学习2

1.栈类型

2.链式栈

3.实例

cpp 复制代码
#ifndef LINKSTACK_H
#define LINKSTACK_H


typedef struct{
    char name[32];
    char sex;
    int age;
    int score;
}DATATYPE;

typedef struct LinkStackNode {
    DATATYPE data;
    struct LinkStackNode *next;
}LinkStackNode;

typedef struct{
    LinkStackNode *top;// head
    int clen;
}LinkStackList;

LinkStackList* CreateLinkStackList();
int DestroyLinkStack(LinkStackList*ls);
int PushLinkStack(LinkStackList*ls,DATATYPE* data);
int PopLinkStack(LinkStackList*ls);
int GetSizeLinkStack(LinkStackList*ls);
DATATYPE*GetTopLinkStack(LinkStackList*ls);
int IsEmptyLinkStack(LinkStackList*ls);


#endif // LINKSTACK_H
cpp 复制代码
#include "linkstack.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
LinkStackList *CreateLinkStackList()
{
   LinkStackList *ls=(LinkStackList*)malloc(sizeof(LinkStackList));
   if(NULL == ls)
   {
       perror("CreateLinkStackList malloc");
       return NULL;
   }
   ls->top =NULL;
   ls->clen = 0 ;
   return ls;

}

int PushLinkStack(LinkStackList *ls, DATATYPE *data)
{
    LinkStackNode* newnode = malloc(sizeof(LinkStackNode));
    if(NULL == newnode)
    {
        perror("PushLinkStack malloc");
        return 1;
    }
    memcpy(&newnode->data,data,sizeof(DATATYPE));
    newnode->next = NULL;
    if(IsEmptyLinkStack(ls))
    {
        ls->top = newnode;
    }
    else
    {
        newnode->next = ls->top;
        ls->top = newnode;
    }
    ls->clen++;
    return 0;
}

int PopLinkStack(LinkStackList *ls)
{
    if(IsEmptyLinkStack(ls))
    {
        return 1;
    }
    LinkStackNode* tmp = ls->top;
    ls->top = ls->top->next;
    free(tmp);
    ls->clen--;
    return 0 ;
}

int IsEmptyLinkStack(LinkStackList *ls)
{
    return 0 == ls->clen;
}

int GetSizeLinkStack(LinkStackList *ls)
{
    return ls->clen;
}

DATATYPE *GetTopLinkStack(LinkStackList *ls)
{
    if(IsEmptyLinkStack(ls))
        return NULL;
    return &ls->top->data;
}

int DestroyLinkStack(LinkStackList *ls)
{
    int len = GetSizeLinkStack(ls);
    int i = 0 ;
    for(i = 0 ;i<len;i++)
    {
        PopLinkStack(ls);
    }
    free(ls);
    return 0;
}

(ls->top = ls->top->next 时中间的tmp 则可被释放 // )

cpp 复制代码
#include <stdio.h>
#include "linkstack.h"
int main()
{
    LinkStackList *ls = CreateLinkStackList();
    DATATYPE data[5]={
           {"zhangsan",'m',20,70},
           {"lisi",'f',21,60},
           {"wangmazi",'m',25,80},
           {"liubei",'f',30,85},
           {"caocao",'f',40,90},
       };

    int  i = 0 ;
    for(i = 0 ;i<5;i++)
    {
        PushLinkStack(ls,&data[i]);
    }

    int size = GetSizeLinkStack(ls);
    DATATYPE* tmp;
    for(i=0;i<size;i++)
    {
        tmp = GetTopLinkStack(ls);
        printf("name:%s score:%d\n",tmp->name,tmp->score);
        PopLinkStack(ls);
    }
    DestroyLinkStack(ls);
    printf("Hello World!\n");
    return 0;
}

4.检查是否泄漏

相关推荐
问道飞鱼1 小时前
每日学习一个数据结构-B+树
数据结构·b树·学习
不染_是非1 小时前
Django学习实战篇六(适合略有基础的新手小白学习)(从0开发项目)
后端·python·学习·django
Midsummer啦啦啦2 小时前
NumPy库学习之argmax函数
学习·numpy
Mero技术博客2 小时前
第二十节:学习Redis缓存数据库实现增删改查(自学Spring boot 3.x的第五天)
数据库·学习·缓存
QuantumYou2 小时前
【对比学习串烧】 SWav和 BYOL
学习·机器学习
为暗香来2 小时前
MySQL学习(视图总结)
数据库·学习·mysql
一道秘制的小菜3 小时前
C++第十一节课 new和delete
开发语言·数据结构·c++·学习·算法
kuiini3 小时前
python学习-10【模块】
python·学习
知识分享小能手3 小时前
mysql学习教程,从入门到精通,SQL ORDER BY 子句(14)
大数据·开发语言·数据库·sql·学习·mysql·大数据开发
哦豁灬4 小时前
NCNN 学习(2)-Mat
深度学习·学习·ncnn