栈 ------ 知识学习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.检查是否泄漏

相关推荐
Kobebryant-Manba4 小时前
学习Bert微调
人工智能·学习·bert
xian_wwq4 小时前
【学习笔记】深度认知系列-第14讲 端侧AI崛起——为什么AI正在从云端走向本地
人工智能·笔记·学习
我爱cope5 小时前
【计算机网络 | 传输层3:TCP 协议概述:面向连接、可靠传输到底意味着什么?】
网络·网络协议·学习·tcp/ip·计算机网络·传输层
代码的小搬运工7 小时前
KVO学习
学习·ios·cocoa
辣知7 小时前
辣知·化智47 黄帝陵与民族精神归途
学习
知识分享小能手8 小时前
深度学习学习教程,从入门到精通,数值计算 — 知识点详解(4)
人工智能·深度学习·学习
zyf1044168 小时前
暑期实践日志 Day49:复盘题库出题成果,夯实章节考点
学习·计算机网络·剪辑·暑期实践·课题任务
kaixin_啊啊9 小时前
多模态学习
学习
m4Rk_10 小时前
【论文阅读】Agent 记忆机制(62):DCM-Agent——用双簇记忆化解优化问题的多范式冲突
论文阅读·人工智能·学习·开源·github
xian_wwq10 小时前
【学习笔记】深度认知系列-第13讲AI Agent时代到来——从“回答问题”到“执行任务”
人工智能·笔记·学习