栈与队列的基本操作

  1. 利用顺序表实现栈

Stack.h

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>

#define MAX_SIZE (100)
typedef int SDataType;
typedef struct Stack
{
    SDataType array[MAX_SIZE];
    int top;//与数据顺序表size一样,1:有效的数据个数 2:top下标表示可用位置
}Stack;
//初始化
void StackInit(Stack *pS)
{
    assert(pS!=NULL);
    pS->top = 0;
}
//入栈
void StackPush(Stack *pS,SDataType data)
{
    assert(pS);
    assert(pS->top < MAX_SIZE);
    pS->array[pS->top++] = data;
}
//出栈
void StackPop(Stack *pS)
{
    assert(pS != NULL);
    assert(pS->top>0);
    pS->top--;
}
//返回栈顶元素
SDataType StackTop(Stack *pS)
{
    assert(pS != NULL);
    assert(pS->top>0);
    return pS->array[pS->top - 1];
}
//判空
int IsEmpty(Stack *pS)
{
    return pS->top == 0 ? 1 : 0;//空返回1,不空返回0
}
//返回栈的大小
int StackSize(Stack *pS)
{
    return pS->top;
}

  1. 利用单链表实现队列
    Queue.h
#pragma once

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>

typedef int QDataType;
typedef struct QNode
{
    QDataType data;
    struct QNode *pNext;
}QNode;
typedef struct Queue
{
    QNode *pFront;
    QNode *pRear;
    int size;
}Queue;

//初始化
void QueueInit(Queue *pQ)
{
    assert(pQ != NULL);
    pQ->pFront = pQ->pRear = NULL;
    pQ->size = 0;
}

//入队列
void QueuePush(Queue *pQ, QDataType data)
{
    pQ->size++;
    //通常情况
    QNode *pNewNode = (QNode *)malloc(sizeof(QNode));
    pNewNode->data = data;
    pNewNode->pNext = NULL;
    if (pQ->pRear == NULL)
    {
        pQ->pRear = pQ->pFront = pNewNode;
        return;
    }
    pQ->pRear->pNext = pNewNode;
    pQ->pRear = pNewNode;
}

// 出队列 
void QueuePop(Queue *pQ)
{
    assert(pQ);
    assert(pQ->size > 0);
    pQ->size--;
    QNode *pOldFront = pQ->pFront;
    pQ->pFront = pQ->pFront->pNext;
    free(pOldFront);
    if (pQ->pFront == NULL)
    {
        pQ->pRear = NULL;
    }

}

// 返回队首元素
QDataType QueueTop(Queue *pQ)
{
    return pQ->pFront->data;
}

// 判断是否为空 
// 1 空 
// 0 不空
int isEmpty(Queue *pQ)
{
    return pQ->size == 0 ? 1 : 0;
}

// 返回数据个数 
int QueueSize(Queue *pQ)
{
    return pQ->size;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值