数据结构(二):栈与链栈

#include <cstdio>
#include <windows.h>
#define MAXSIZE 100

struct Node
{
    int data[MAXSIZE];
    int top;
};
typedef struct Node MyStack;
//初始化
void MyStackInit(MyStack S)
{
    S.top = -1;
}
//判空
BOOL MyStackEmpty(MyStack S)
{
    if (S.top == -1)
        return TRUE;
    else
        return FALSE;
}
//入栈
void MyStackPush(MyStack S, int x)
{
    if (S.top = MAXSIZE - 1)
    {
        printf("栈满");
        exit(0);
    }
    S.top++;
    S.data[S.top] = x;
}
//出栈
int MyStackPop(MyStack S)
{
    int x;
    if (MyStackEmpty(S) == TRUE)
    {
        printf("栈空");
        exit(0);
    }
    else
    {
        x = S.data[S.top];
        S.top--;
        return x;
    }
}
//取栈顶
int MyStackGetPop(MyStack S)
{
    if (MyStackEmpty(S) == TRUE)
    {
        printf("栈空");
        exit(0);
    }
    else
    {
        return S.data[S.top];
    }
}

/*********************************
*             链栈               *
**********************************/

struct Node
{
    int data;
    struct Node* next;
};
typedef struct Node MyStackNode;
typedef struct
{
    MyStackNode* top;
}MyLinkedStack;
MyLinkedStack*  S;
//初始化
void MyLinkedStackInit(MyLinkedStack* S)
{
    S->top = NULL;
}

BOOL MyLinkedStackEmpty(MyLinkedStack* S)
{
    if (S->top == NULL)
        return TRUE;
    else return FALSE;
}

void MyLinkedStackPush(MyLinkedStack* S, int x)
{
    MyStackNode* ms;
    ms = (MyStackNode*)malloc(sizeof(MyStackNode));
    if (ms = NULL)
    {
        printf("申请失败");
        exit(0);
    }
    else
    {
        ms->data = x;
        ms->next = S->top;
        S->top = ms;
    }
}

int MyLinkedStackPop(MyLinkedStack* S)
{
    MyStackNode* p;
    int x;
    if (S->top == NULL)
    {
        printf("栈空");
        exit(0);
    }
    x = S->top->data;
    p = S->top;
    S->top = S->top->next;
    free(p);
    return x;
}

博客写的丑的我自己不能看了。。。

时间: 2024-08-07 10:17:52

数据结构(二):栈与链栈的相关文章

数据结构第八篇——链栈

?注:未经博主同意,不得转载. 链栈 链式存储的栈称为链栈.可用单链表来实现链栈,因此其节点结构与单链表的结构相同.下面给出这种结构的定义: 若要了解顺序栈的内容请跳转至http://www.cnblogs.com/tenjl-exv/p/7575549.html 链栈无栈满问题,空间可扩充,但有栈空问题,栈空的条件为top->next=NULL.插入与删除仅在栈顶处进行,链式栈的栈顶在链表头. 链栈的定义如下: 1 typedef int Data; 2 struct StackNode 3

Java数据结构-线性表之栈(顺序栈和链栈)

栈的定义:(特殊的线性表) ??仅在表的一端进行插入和删除的线性表.允许插入.删除的这一端称为栈顶,另一端称为栈底.表中没有元素时称为空栈. ??被称为后进先出的线性表(Last In First Out),简称 LIFO表,或被称为先进后出的线性表(First In Last Out),简称 FILO表. ??栈更具存储方式的不同分为两种:顺序栈和链栈. 顺序栈: 和顺序表一样,顺序栈也采用数组来存放数据元素: 为了保证栈底位置的不变,采用数组下标为0的位置作为顺序栈的栈底. 而栈顶指针的最大

顺序栈和链栈实现

以前参照weiss的<数据结构与算法分析>写过两篇随笔 栈ADT的链表实现 栈ADT的数组实现 因为考研的缘故,现在看了严蔚敏的<数据结构 c版>也跟着写了一遍,原理都类似 链栈: /*链栈*/ typedef status typedef struct node Stack; typedef struct node * ptrToNode; struct node { int data; ptrToNode next; }; Status initStack(Stack &

数据结构(java语言描述)链栈的定义

1.定义栈接口 package stack;public interface Istack {    public void clear();    public boolean isEmpty();    public int length();    public Object peek();    public void push(Object x) throws Exception;    public Object pop();} 2.定义Node结点 package stack; i

小猪的数据结构辅助教程——3.2 栈与队列中的链栈

小猪的数据结构辅助教程--3.2 栈与队列中的链栈 标签(空格分隔): 数据结构 1.本节引言: 嗯,本节没有学习路线图哈,因为栈我们一般都用的是顺序栈,链栈还是顺带提一提吧, 栈因为只是栈顶来做插入和删除操作,所以较好的方法是将栈顶放在单链表的头部,栈顶 指针与单链表的头指针合二为一~所以本节只是讲下链栈的存储结构和基本操作! 2.链栈的存储结构与示意图 存储结构: typedef struct StackNode { SElemType data; //存放的数据 struct StackN

数据结构(C实现)------- 链栈

描述:      链栈,即栈的链式存储结构,链栈通常使用不带头结点的单链表来表示,因此其结点的结构和单链表的结点结构相同. 在一个链栈中,栈底就是链表的最后一个结点,而栈顶总是链表的第一个结点.因此,新入栈的元素即为链表中采用头插法新加入的结点,一个链栈可以由栈顶指针唯一确定,当top为NULL时,则表示该栈是一个空的链栈.  实现:   链栈结点的类型描述: typedef int ElemType; typedef struct node{ ElemType data; struct nod

数据结构_线性表_顺序存储之1顺序栈2共享栈_链式存储之链栈_栈的应用举例

1>//栈是先进后出,后进先出的线性表 简称LIFO线性表 //栈的顺序存储结构成为顺序栈(sequebtial stack). //顺序栈利用一组地址连的存储单元依次存放从栈底到 栈顶的数据元素,通常用一维数组存放栈的元素 //"指针"top并非指针,而是表示栈顶元素的当前位置 //top不是指针型变量而是整形变量,top=0空栈,top=MaxSize 表示满栈,当top>maxsize 表示栈溢出 代码 #include <stdio.h> #includ

数据结构与算法——链栈

今天总结链栈. 什么是链栈? 链栈就是栈的链式存储结构,就跟单链表差不多.只不过头指针变成了栈顶指针,这个指针总是指向栈顶元素.栈底结点的指针域指向NULL,当top==NULL时,则栈为空.具体实现时,对比着单链表,然后结合图示,很容易就写出来了. 图示: 实现: <span style="font-family:Courier New;font-size:14px;">#include <iostream> using namespace std; temp

栈的链式存储结构和入栈出栈操作

参考<大话数据结构>P98~99——栈的链式存储结构. 进栈: 出栈: 举个简单的例子: 代码和解释如下(VS2012测试通过): 1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 typedef string status;//用书上推荐的status返回是否成功,C++中的模板类string比字符数组char[]更方便 6 7 //栈的结点 8 //包含data,和指向下一个结点