美文网首页
数据结构学习之栈、队

数据结构学习之栈、队

作者: harrytc | 来源:发表于2018-03-28 18:38 被阅读17次

文章共分为4个部分每一部分都包括了定义和相关操作

  • 第一部分 顺序栈
  • 第二部分 链栈
  • 第三部分 顺序队
  • 第四部分 链队
第一部分 顺序栈
//顺序栈定义
typedef struct SqStack
{
    int data[maxSize];
    int top;
}SqStack;

//初始化栈
void initStack(SqStack &st)
{
    st.top = -1;  //不设置为0 是因为在数组中data[0]也可以存放一个元素
}

//判断栈空代码
int isEmpty (SqStack st)
{
    if (st.top == -1)
        return 1;
    else
        return 0;
}

//进栈
int push (SqStack &st, int x)
{
    if (st.top == maxSize - 1)
        return 0;   //栈满了
    st.top++;
    st.data[st.top] = x;
    return 1;
}

//出栈
int pop (SqStack & st, int &x)
{
    if (st.top == -1)
        return 0;
    x = st.data[st.top];
    st.top--;
    return 1;
}
第二部分 链栈
//链栈定义    相当于操作受限的链表
typedef struct LNode
{
    int data;
    struct LNode * next;
} LNode;

//链栈初始化
void initStact(LNode * & lst)
{
    lst = (LNode *)malloc(sizeof(LNode));
    lst->next = NULL;
}

//判断栈空
int isEmpty(LNode * lst)
{
    if (lst->next == NULL)
        return 1;
    else
        return 0;
}

//进栈
void push (LNode * lst, int x)
{
    LNode * p;
    p = (LNode *)malloc(sizeof(LNode));
    p ->next = NULL;
    
    p->data = x;
    p->next = lst->next;
    lst->next = p;
}

//出栈
int pop (LNode * lst, int & x)
{
    LNode * p;
    if (lst->next == NULL)
        return 0;
    p = lst->next;
    lst->next = p->next;
    free(p);
    return 1;
    
}
第三部分 顺序队

(顺序队中有些劣势在循环队列中可以避免,此处写的是循环队列,循环队列只是一种逻辑结构,与存储结构无关,此处的储存结构是循环结构)

//顺序队定义
typedef struct SqQueue
{
    int data[maxSize];
    int front;
    int rear;
}SqQueue;

//初始化队
void initQueue (SqQueue & qu)
{
    qu.front = qu.rear = 0;
}

//判断队空
int isQueueEmpty(SqQueue qu)
{
    if (qu.front == qu.rear)
        return 1;
    else
        return 0;
}

//进队
int enQueue(SqQueue & qu, int x)
{
    if (qu.front == (qu.rear+1)%maxSize) //队满的条件
        return 0;
    qu.rear = (qu.rear + 1) % maxSize;
    qu.data[qu.rear] = x;
    return 1;
}

//出队算法
int deQueue (SqQueue & qu, int & x)
{
    if (qu.rear == qu.front)
        return 0;
    x = qu.data[qu.front];
    qu.front = (qu.front + 1) % maxSize;
    return 1;
}

//出现问题尽量用顺序对来解决问题,尽可能避免链队,毕竟顺序队的定义操作更简单一些
第四部分 链队
//链队节点定义
typedef struct QNode
{
    int data;
    struct QNode * next;
}QNode;

//链队类型定义
typedef struct
{
    QNode * front;
    QNode * rear;
} LiQueue;


//初始化链队
void initQueue(LiQueue * & lqu)
//指针型变量在函数体中需要改变的写法,C++中的写法与C中的写法不同注意一下
{
    lqu = (LiQueue *)malloc(sizeof(QNode));
    lqu->front = lqu->rear = NULL;
}

//判断对空算法
int isQueueEmpty(LiQueue * lqu)
{
    if(lqu->rear == NULL || lqu->front == NULL)
        return 1;
    else
        return 1;
}
//入队
void enQueue(LiQueue * lqu, int x)
{
    QNode * p;
    p = (QNode *)malloc(sizeof(QNode));
    p->data = x;
    p->next = NULL;
    if (lqu->rear ==NULL)
        lqu->front=lqu->rear = p;
    else
    {
        lqu->rear->next = p;
        lqu->rear = p;
    }
}
//出队
int deQueue(LiQueue * lqu, int & x)
{
    QNode * p;
    if (lqu->rear == NULL)
        return 0;
    else
        p = lqu->front;
    if (lqu->front == lqu->rear) //栈队中只有一个元素时需要特殊处理一下
        lqu->front = lqu->rear = NULL;
    else
        lqu->front=lqu->front->next;
    x = p->data;
    free(p);
    return 1;
        
}

相关文章

  • 数据结构学习之栈、队

    文章共分为4个部分每一部分都包括了定义和相关操作 第一部分 顺序栈 第二部分 链栈 第三部分 顺序队 第四部分 链...

  • 数据结构 栈和队列

    数据结构 栈和队列 栈 顺序栈 top = -1 链栈 初始化 判断队空 入队: 头插法 出队: 单链表删除 队列...

  • android数据结构

    基本数据结构:数组、链表、栈、队列栈:LIFO 压栈出栈,只允许在栈顶操作队列:FIFO ,一般只允许队尾插,队首...

  • 刷穿剑指offer-Day20-队列I 队列的使用与基础题型!

    队列的介绍 队列(queue)是一种简单、常用的数据结构,在上一章栈的学习中,我们已经提到了队列这种数据结构。 队...

  • 学习情况

    数学高数12看完 恋恋有词4 数据结构队和栈的2

  • 学习javascript数据结构(一)——栈和队列

    前言 只要你不计较得失,人生还有什么不能想法子克服的。 原文地址:学习javascript数据结构(一)——栈和队...

  • 栈的链式存储实现过程

    1、定义栈的数据结构: 2、初始化栈 3、入栈,即向栈的头部追加一个新的节点 4、出栈,即将队尾的元素弹出 5、 ...

  • Android面试题总结(题目+复习链接)

    数据结构 1.栈实现原理 java数据结构与算法之栈(Stack)设计与实现 - CSDN博客 2.链表实现原理 ...

  • JavaScript数据结构之队栈互搏

    今天稍微停下前进的脚步,来看下队栈的左右互搏术。前两天学习了队列和栈以后,今天就可以试着来用两个栈实现队列的功能 ...

  • 数据结构之栈 原理 栈是一种比较常见的数据结构,它的操作可以看做是数组的子集,因为栈只能从栈顶取元素和添加元素,并...

网友评论

      本文标题:数据结构学习之栈、队

      本文链接:https://www.haomeiwen.com/subject/xquucftx.html