您的位置:首页 > 理论基础 > 数据结构算法

企业级数据结构-顺序栈实现

2015-01-20 15:58 281 查看

Stack基本概念

栈是一种 特殊的线性表

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

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

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



Stack的常用操作

创建栈

销毁栈

清空栈

进栈

出栈

获取栈顶元素

获取栈的大小

#ifndef _MY_STACK_H_

#define _MY_STACK_H_

typedef void Stack;

Stack* Stack_Create();

void Stack_Destroy(Stack* stack);

void Stack_Clear(Stack* stack);

int Stack_Push(Stack* stack, void* item);

void* Stack_Pop(Stack* stack);

void* Stack_Top(Stack* stack);

int Stack_Size(Stack* stack);

#endif //_MY_STACK_H_

栈的顺序存储设计与实现

1、基本概念



2、设计与实现

下面栈实现代码是根据线性表之线性存储实现,如果需要参考,请把前几篇线性表之线性存储实现的代码拷贝,这里只是基于线性表写的

Seqstack.h
// seqstack.h

#ifndef _MY_SEQSTACK_H_
#define _MY_SEQSTACK_H_

typedef void SeqStack;

SeqStack* SeqStack_Create(int capacity);

void SeqStack_Destroy(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 //_MY_SEQSTACK_H_


Seqstack.c
#include "stdio.h"
#include "stdlib.h"
#include "string.h"

#include "seqstack.h"
#include "seqlist.h"  //线性表的顺序存储头文件

SeqStack* SeqStack_Create(int capacity)
{
return SeqList_Create(capacity);
}

void SeqStack_Destroy(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_Delete(stack, SeqList_Length(stack) -1);
}

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);
}


测试.c
#include "stdio.h"
#include "stdlib.h"
#include "string.h"

#include "seqstack.h"

void main()
{

int a[20], i = 0;
int *pTmp = NULL;
SeqStack* stack = NULL;

stack = SeqStack_Create(20);

for (i=0; i<10; i++)
{
a[i] = i+1;
//SeqStack_Push(stack, &a[i]);
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_Destroy(stack);

system("pause");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: