C语言实现链栈的初始化,入栈,出栈,判空,取栈顶元素,求链栈长度,摧毁链栈。

#include <stdio.h>
#include "stdbool.h"
#include "malloc.h"
#include "assert.h" 
#define LinkElemtype int
typedef struct LinkStackNode
{
	LinkElemtype data;
	struct LinkStackNode* next;
}LinkStackNode;

typedef struct LinkStack
{
	LinkStackNode* head;
}LinkStack;

// 初始化栈 
void LinkStackInit(LinkStack* ps);
// 入栈 
void LinkStackPush(LinkStack* ps, LinkElemtype v);
// 出栈 
void LinkStackPop(LinkStack* ps);
// 获取栈顶元素 
int LinkStackTop(LinkStack* ps);
//显示
void LinkStackshow(LinkStack* ps);
//求长度
int Getlength(LinkStack* ps);
//摧毁链栈
void LinkStackDestroy(LinkStack *ps);
//判空
bool LinkEmpty(LinkStack* ps)
{
	assert(ps != NULL);
	return ps->head == NULL;
}

void LinkStackInit(LinkStack* ps)
{
	assert(ps != NULL);
	ps->head = NULL;
}

void LinkStackPush(LinkStack* ps,LinkElemtype v)
{
	assert(ps != NULL);
	LinkStackNode* s = (LinkStackNode*)malloc(sizeof(LinkStackNode));
	assert(s!= NULL);
	s->data = v;
	s->next = ps->head;
	ps->head = s;
}

void LinkStackPop(LinkStack* ps)
{
	assert(ps != NULL);
	if (LinkEmpty(ps))
	{
		printf("栈空");
		return;
	}
	LinkStackNode* p = ps->head;
	ps->head = p->next;	
}

void LinkStackshow(LinkStack* ps)
{
	assert(ps != NULL);
	LinkStackNode* p = ps->head;
	while (p != NULL)
	{
		printf("%d ", p->data);
		p = p->next;
	}
}


int LinkStackTop(LinkStack* ps)
{
	assert(ps != NULL);
	if (LinkEmpty(ps))
	{
		printf("栈空");
		return 0;
	}
	return ps->head->data;
}

int Getlength(LinkStack* ps)
{
	assert(ps != NULL);
	int length = 0;
	LinkStackNode *p = ps->head;
	while(p!=NULL)
	{
		length++;
		p = p->next;	
	} 
	return length;
}

void LinkStackDestroy(LinkStack *ps)
{
	assert(ps != NULL);
	LinkStackNode *p = ps->head,*q;
	while (p!= NULL)	
   {
    q=p;
    p=p->next;
    free(q);
}
}

int main()
{
	LinkStack st;
	LinkStackInit(&st);
	LinkStackPush(&st, 1);
	LinkStackPush(&st, 3);
	LinkStackPush(&st, 5);
	LinkStackPush(&st, 7);
	LinkStackPush(&st, 9);
	LinkStackPush(&st, 10);
	LinkStackshow(&st);
	printf("\n");
	LinkStackPop(&st);
	LinkStackshow(&st);
	printf("\n");
	LinkStackTop(&st);
	LinkStackshow(&st);
	printf("\n");
	printf("链栈的长度为:%d",Getlength(&st));
	return 0;
}

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值