栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构——栈

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构——栈

栈
  • 顺序栈
  • 共享栈
  • 链栈(带有头节点)
  • 链栈(不带有头节点)

链栈就是链表,只是多了一些限制罢了。

顺序栈
#include
#define MAX_SIZE 10
using namespace std;
typedef struct SqStack
{
    int data[MAX_SIZE];
    int top;
}SqStack;

void InitStack(SqStack &S)
{
    S.top=-1;
}

bool StackEmpty(SqStack &S)
{
    if(S.top==-1) return true;
    else return false;
}

bool Push(SqStack &S,int x)
{
    if(S.top==MAX_SIZE-1) return false;

    S.data[++S.top]=x;
    return true;
}

bool Pop(SqStack &S,int &x)
{
    if(S.top==-1) return false;

    x=S.data[S.top--];
    return true;
}

bool GetTop(SqStack &S,int &x)
{
    if(S.top==-1) return false;

    x=S.data[S.top];
    return true;
}

void Output(SqStack S)
{
    printf("data=");
    for(int i=0;i
        cout<
    SqStack S;
    int e;
    InitStack(S);
    Push(S,5);
    Push(S,6);
    Push(S,100);
    Push(S,1);
    Push(S,7);
    Output(S);
    Pop(S,e);
    Output(S);
    Pop(S,e);
    Output(S);
}

共享栈
#include
#define MAX_SIZE 10
using namespace std;
typedef struct ShareStack
{
    int data[MAX_SIZE];
    int top_up;
    int top_down;
}ShareStack;

void InitShareStack(ShareStack &S)
{
    S.top_down=-1;
    S.top_up=MAX_SIZE;
}

bool ShareStackEmpty(ShareStack &S)
{
    if(S.top_down+1==S.top_up)
    return true;
}

bool ShareStack_downEmpty(ShareStack &S)
{
    if(S.top_down==-1) return true;
    else return false;
}

bool ShareStack_upEmpty(ShareStack &S)
{
    if(S.top_up==MAX_SIZE) return true;
    else return false;
}
链栈(带有头节点)
#include
#define MAX_SIZE 10
using namespace std;
typedef struct LinkNode
{
    int data;
    LinkNode *next;
}LinkNode,*LiStack;

void InitStack(LiStack &L)
{
    L=(LinkNode *)malloc(sizeof(LinkNode));
    L->next=NULL;
}

bool ListackEmpty(LiStack &L)
{
    if(L->next==NULL) return true;
    else return false;
}

bool LiStackPush(LiStack &L,int x)
{
    LinkNode *p=(LinkNode *)malloc(sizeof(LinkNode));
    p->data=x;

    p->next=L->next;
    L->next=p;
    return true;
}

bool ListackPop(LiStack &L,int &x)
{
    if(L->next==NULL) return false;

    LinkNode *p=L->next;
    x=p->data;
    L->next=p->next;
    free(p);
    return true;
}
int main()
{

}

链栈(不带有头节点)
#include
using namespace std;
typedef struct LinkNode
{
    int data;
    LinkNode *next;
}LinkNode,*LiStack;


void InitStack(LiStack &L)
{
    L=NULL;
}

bool LiStackEmpty(LiStack &L)
{
    if(L==NULL) return true;
    else return false;
}

bool LiStackPush(LiStack &L)
{
    LinkNode *p=(LinkNode *)malloc(sizeof(LinkNode));
    p->next=L;
    L=p;
}

bool ListackPop(LiStack &L,int &x)
{
    if(L==NULL) return false;

    LinkNode *p=L;
    x=p->data;
    L=L->next;
    free(p);
    return true;
}
int main()
{
    return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1030024.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号