您的位置:首页 > 汽车 > 时评 > 栈 ------ 知识学习2

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

2024/9/8 10:45:29 来源:https://blog.csdn.net/kxy102852/article/details/140683646  浏览:    关键词:栈 ------ 知识学习2

1.栈类型

2.链式栈 

 3.实例

#ifndef LINKSTACK_H
#define LINKSTACK_Htypedef struct{char name[32];char sex;int age;int score;
}DATATYPE;typedef struct LinkStackNode {DATATYPE data;struct LinkStackNode *next;
}LinkStackNode;typedef struct{LinkStackNode *top;// headint 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
#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 则可被释放 // )

#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.检查是否泄漏

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com