C语言数据结构-链式栈

头文件:stack.h

#ifndef STACK_H

#define STACK_H

#include <stdio.h>

#include <stdlib.h>

typedef int DataType;

/* 链式栈节点类型 */

typedef struct staNode

{

DataType data;

struct staNode *pNext;

}StackNode;

/* 链式栈标签类型 */

typedef struct list

{

StackNode *pTop; //指向栈顶指针

int cLen;

}StackList;

extern StackList *createSatckList();

extern int isEmptyStackList(StackList *);

extern int pushStackList(StackList *, DataType );

extern int popStackList(StackList *, DataType *);

extern DataType getStackTop(StackList *);

extern void clearStackList(StackList *);

extern void destroyStackList(StackList **);

extern void showStackList(StackList *pList);

#endif

源文件:stack.c main.c

stack.c

#include "stack.h"

StackList *createSatckList()

{

StackList *pList = malloc(sizeof(StackList));

if (NULL == pList)

{

perror("fail to malloc");

return NULL;

}

pList->pTop = NULL;

pList->cLen = 0;

return pList;

}

int isEmptyStackList(StackList *pList)

{

return pList->cLen == 0;

}

入栈:

int pushStackList(StackList *pList, DataType data)

{

StackNode *pTmpNode = malloc(sizeof(StackNode));

if (NULL == pTmpNode)

{

perror("fail to malloc");

return -1;

}

pTmpNode->data = data;

pTmpNode->pNext = NULL;

pTmpNode->pNext = pList->pTop;

pList->pTop = pTmpNode;

pList->cLen++;

return 0;

}

遍历:

void showStackList(StackList *pList)

{

StackNode *pTmpNode = pList->pTop;

while (pTmpNode != NULL)

{

printf("%d ", pTmpNode->data);

pTmpNode = pTmpNode->pNext;

}

printf("\n");

}

出栈:

int popStackList(StackList *pList, DataType *pOutData)

{

if (isEmptyStackList(pList))

{

return 0;

}

StackNode *pTmpNode = pList->pTop;

if (NULL != pOutData)

{

*pOutData = pTmpNode->data;

}

pList->pTop = pTmpNode->pNext;

free(pTmpNode);

pList->cLen--;

return 0;

}

DataType getStackTop(StackList *pList)

{

if (!isEmptyStackList(pList))

{

return pList->pTop->data;

}

}

void clearStackList(StackList *pList)

{

while (pList->pTop != NULL)

{

popStackList(pList, NULL);

}

}

销毁:

void destroyStackList(StackList **ppList)

{

clearStackList(*ppList);

free(*ppList);

*ppList = NULL;

}

main.c

#include "stack.h"

int main(int argc, const char *argv[])

{

StackList *pList = NULL;

DataType OutData;

pList = createSatckList();

pushStackList(pList, 1);

pushStackList(pList, 2);

pushStackList(pList, 3);

pushStackList(pList, 4);

showStackList(pList);

popStackList(pList, &OutData);

printf("pop data = %d\n", OutData);

showStackList(pList);

destroyStackList(&pList);

return 0;

}

相关推荐
林姜泽樾2 小时前
Linux入门第十二章,创建用户、用户组、主组附加组等相关知识详解
linux·运维·服务器·centos
zyq99101_12 小时前
优化二分查找:前缀和降复杂度
数据结构·python·蓝桥杯
qyzm2 小时前
天梯赛练习(3月13日)
开发语言·数据结构·python·算法·贪心算法
BUG_MeDe3 小时前
json格式字符串解析的简单使用 libjson-c
c语言·开发语言·json
xiaokangzhe3 小时前
Linux系统安全
linux·运维·系统安全
feng一样的男子3 小时前
NFS 扩展属性 (xattr) 提示操作不支持解决方案
linux·go
Highcharts.js4 小时前
Highcharts React v4.2.1 正式发布:更自然的React开发体验,更清晰的数据处理
linux·运维·javascript·ubuntu·react.js·数据可视化·highcharts
c++之路4 小时前
Linux网络协议与编程基础:TCP/IP协议族全解析
linux·网络协议·tcp/ip
一叶落4384 小时前
LeetCode 50. Pow(x, n)(快速幂详解 | C语言实现)
c语言·算法·leetcode
皙然4 小时前
彻底吃透红黑树
数据结构·算法