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

数据结构再学习--栈的链表实现

2016-06-09 01:24 483 查看
栈是一种很基本的数据结构,就是一个线性表和栈索引值,因为线性表可以用数组和链表实现,这里的是用链式线性表实现了一个操作。在某些特殊的情况下很可能需要把两个栈合成一个栈,两个指针从两端向中间靠拢。所有完整代码:https://github.com/xiaobai1993/XBDataStructNote

#include "XBLinkStack.h"

void initLinkStack(XBLinkStack * statck)
{
if (statck==NULL) {
return;
}
statck->top = -1;

initXBLinkNode(&(statck->linkStackP));//初始化这个链表
}

int isLinkStackEmpty(XBLinkStack * statck)
{
return statck->top==-1;
}
void pushLinkStack(XBLinkStack * stack,DATATYPE data)
{

stack->top+=1;
addItemToXBLinkNode(&(stack->linkStackP), data);
}
void popLinkStack(XBLinkStack *stack,DATATYPE * data)
{

if (!isLinkStackEmpty(stack)) {
getItemFromXBLinkNodeByIndex(stack->linkStackP, stack->top, data);
stack->top--;
}
}


下面是普通的栈和共享栈

typedef struct
{
DATATYPE data[MAX_SIZE];
int top;//栈顶的指针

}XBStack;

typedef struct
{

DATATYPE data[MAX_SIZE];
int top1;
int top2;

}XBShareStack;
void initStack(XBStack * statck)
{
statck->top = -1;
}

int isEmpty(XBStack * statck)
{
return statck->top==-1;
}
int isFull(XBStack * stack)
{
return stack->top==MAX_SIZE-1;
}
void push(XBStack * stack,DATATYPE data)
{
if (!isFull(stack)) {
stack->top+=1;
stack->data[stack->top]= data;
}
}
void pop(XBStack *stack,DATATYPE * data)
{

if (!isEmpty(stack)) {
*data = stack->data[stack->top];
stack->top--;

}
}
//-------共享栈

//共享栈是两个栈,简化就是用了两个top标记和一个数组,一个初始值为0,另一个为数组的MAX_SIZE-1

//**********通常用于解决两个栈的空间有相反需求的关系,而且数据类型是相同的类型

//压入共享栈
int PushShareStatck(XBShareStack *stack,DATATYPE data,int stackNumber)
{
if (stack->top1+1==stack->top2) {//满了
return FAIL;
}
if (stackNumber==1) {//表示栈1元素入栈

stack->data[++stack->top1] = data;
}
else if(stackNumber==2)
{
stack->data[--stack->top2]=data;
}
return SUCCESS;
}
int PopShareStack(XBShareStack *stack,DATATYPE * obj,int stackNumber)
{
if (stackNumber==1) {

if (stack->top1==-1) {

return FAIL;
}
*obj=stack->data[stack->top1--];
return SUCCESS;
}
else if(stackNumber==2)
{
if (stack->top2==MAX_SIZE) {
return FAIL;
}
*obj = stack->data[stack->top2++];
}
return SUCCESS;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: