数据结构(C语言):栈的创建、入栈、出栈、栈的销毁等操作

stack.h

#ifndef _STACH_H_
#define _STACH_H_

#include <stdio.h>
#include <stdlib.h>

typedef int DataType;

typedef struct node
{
	DataType data;
	struct node *pNext;
}StackNode;

typedef struct list
{
	StackNode *pTop;//栈顶
	int cLen;
}StackList;


extern StackList *createStackList();
extern void showForEachStack(StackList *pList);
extern int pushStack(StackList *pList,DataType data);
extern int popStack(StackList *pList,DataType *poutdata);
extern DataType getStackTop(StackList *pList);
extern void	destroyStack(StackList **pList);

#endif

stack.c

#include "stack.h"

/*创建栈*/
StackList *createStackList()
{
	StackList *pList = malloc(sizeof(StackList));
	if(NULL == pList)
	{
		perror("createStackList malloc error!\n");
		return NULL;
	}
	pList->pTop = NULL;
	pList->cLen = 0;

	return pList;
}

/*遍历输出栈(原则上不允许,这里为了验证其他操作)*/
void showForEachStack(StackList *pList)
{
	StackNode *pTmpNode = pList->pTop;
	while(pTmpNode != NULL)
	{
		printf("%d ",pTmpNode->data);
		pTmpNode = pTmpNode->pNext;
	}
	printf("\n");
}

/*判断是否空栈*/
int isEmptyStack(StackList *pList)
{
	return 0 == pList->cLen;
}

/*入栈*/
int pushStack(StackList *pList,DataType data)
{
	StackNode *pushNode = malloc(sizeof(StackNode));
	if(NULL == pushNode)
	{
		perror("pushStack malloc error!\n");
		return -1;
	}
	pushNode->data = data;
	pushNode->pNext = pList->pTop;
	pList->pTop = pushNode;
	pList->cLen++;
	
	return 0;
}

/*出栈*/
int popStack(StackList *pList,DataType *poutdata)
{
	if(isEmptyStack(pList))
	{
		return 0;
	}
	StackNode *pFreeNode = pList->pTop;
	pList->pTop = pFreeNode->pNext;
	if(poutdata != NULL)
	{
		*poutdata = pFreeNode->data;
	}
	free(pFreeNode);
	pList->cLen--;

	return 0;
}

/*获取栈顶元素*/
DataType getStackTop(StackList *pList)
{
	return pList->pTop->data;
}

/*销毁*/
void destroyStack(StackList **pList) 
{
	while((*pList)->pTop != NULL)
	{
		popStack(*pList,NULL);
	}
	free(*pList);
	*pList = NULL;
}

main.c

#include "stack.h"

int main(int argc, const char *argv[])
{
	StackList *pList = NULL;
	StackNode *pTmpNode = NULL;
	pList = createStackList(pList);
	
	int i = 0;
	for(i = 10;i > 0;i--)
	{
		pushStack(pList,i);
	}

	popStack(pList,NULL);
	popStack(pList,NULL);
	showForEachStack(pList);
	
	printf("%d\n",getStackTop(pList));
	destroyStack(&pList);
	return 0;
}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值