图解栈的顺序存储

 

栈是一种  特殊的线性表

栈仅能在线性表的一端进行操作

栈顶(Top):允许操作的一端

栈底(Bottom):不允许操作的一端

 

 

 

#ifndef _KN_SEQSTACK_H_
#define _KN_SEQSTACK_H_

typedef void SeqStack;

//创建一个线性栈
SeqStack* SeqStack_Create(int capacity);

//释放一个线性栈
void SeqStack_Destory(SeqStack *stack);

//清空一个线性栈
void SeqStack_Clear(SeqStack *stack);

//向栈压入一个元素
int SeqStack_Push(SeqStack *stack, void *item);

//弹出一个元素
void*SeqStack_Pop(SeqStack *stack);

//获取栈顶元素
void*SeqStack_Top(SeqStack *stack);

//获取栈的大小
int SeqStack_Size(SeqStack *stack);

//获取栈的容量
int SeqStack_Capacity(SeqStack *stack);

#endif

/*
	栈是限定仅在表尾进行插入和删除操作的线性表
	允许插入和删除的一端称为栈顶,另一端称为栈底。
	不含任何数据元素的栈称为空栈,栈又称为后进先出(Last In First Out)
	的线性表,简称LIFO结构

	栈的插入操作,叫做 进栈、压栈、入栈
	栈的删除操作,叫做 出栈

	队列是只允许在一端进行插入操作、而在另一端进行删除操作的线性表
*/

 

#include <stdio.h>
#include <string.h>
#include "knSeqlist.h"
#include "knSeqStack.h"
//使用线性表模拟栈

//创建一个线性栈
SeqStack* SeqStack_Create(int capacity)
{
	return SeqList_Create(capacity);
}

//释放一个线性栈
void SeqStack_Destory(SeqStack *stack)
{
	SeqList_Destroy(stack);
}

//清空一个线性栈
void SeqStack_Clear(SeqStack *stack)
{
	SeqList_Clear(stack);
}

//向栈压入一个元素 相当于向链表的尾部插入元素
int SeqStack_Push(SeqStack *stack, void *item)
{
	return SeqList_Insert(stack, item, SeqList_Length(stack));
}

//弹出一个元素 相当于从链表的尾部拿出元素
void*SeqStack_Pop(SeqStack *stack)
{
	return SeqList_Detete(stack, SeqList_Length(stack) - 1);//链表的位置是从0开始的
}

//获取栈顶元素 相当于获取链表的尾部元素
void*SeqStack_Top(SeqStack *stack)
{
	return SeqList_Get(stack, SeqList_Length(stack) - 1);
}

//获取栈的大小
int SeqStack_Size(SeqStack *stack)
{
	return SeqList_Length(stack);
}

//获取栈的容量
int SeqStack_Capacity(SeqStack *stack)
{
	return SeqList_Capacity(stack);
}

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "knSeqStack.h"


void test()
{
	int i = 0;
	int a[10];
	int *pTmp = NULL;
	SeqStack *stack = NULL;
	stack = SeqStack_Create(10);
	if (stack == NULL){
		return;
	}
	for (i = 0; i < 6; i++){
		a[i] = i + 1;
		SeqStack_Push(stack, &a[i]);
	}
	pTmp = (int *)SeqStack_Top(stack);
	printf("获取栈顶top:%d\n", *pTmp);
	printf("capacity:%d\n", SeqStack_Capacity(stack));
	printf("size:%d\n", SeqStack_Size(stack));
	//元素出栈
	while (SeqStack_Size(stack) > 0){
		printf("pop:%d \n", *((int*)SeqStack_Pop(stack)));
	}
	SeqStack_Destory(stack);
}

int main()
{
	test();
	system("pause");
	return 0;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值