数据结构 —— 栈和队列

今日一言:
当人们做不到一些事情的时候,
他们就会对你说你也同样不能。
  ——《当幸福来敲门》


数据结构 —— 栈和队列

3.1

栈: 限定仅在表尾进行插入或删除操作的线性表。
LIFO结构: 后进先出
FILO结构: 先进后出

栈的实现代码(顺序栈):

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

#define NullElem -1

typedef int Elem;

typedef struct{
    Elem *base;
    Elem *top;
    int size;
    int MaxSize;
}SqStack;

// 初始化线性表 
void initSqStack(SqStack *stackint maxSize){
    stack->base = (Elem *)malloc(sizeof(Elem)*maxSize);
    stack->top = stack->base;
    stack->size = 0;
    stack->MaxSize = maxSize;
}

// 入栈
void pushSq(SqStack *stack, Elem elem){
    ifstack->size >= stack->MaxSize ) return;
    stack->top++;
    stack->size++;
    *stack->top = elem;
}

// 出栈
Elem popSq(SqStack *stack){
    if( !stack->size ) return NullElem;
    Elem elem = *stack->top;
    stack->top--;
    stack->size--;
    return elem;
}

// 获取当前栈长度 
int getSize(SqStack *stack){
    return stack->size;
}

// 获取栈容量 
int getMaxSize(SqStack *stack){
    return stack->MaxSize;
}

3.2 队列

队列: 队列是一种先进先出的线性表。
FIFO结构: 先进先出

知识让你看得懂淘宝简介在说什么。⬇⬇⬇

淘宝没给红包
淘宝没给红包

队列的实现代码:

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

#define NullElem 0

typedef int Elem;

typedef struct{
    Elem *data;
    int front;
    int rear;
    int size;
    int MaxSize;
}SqQueue;

// 初始化线性表 
void initSqQueue(SqQueue *queueint maxSize){
    queue->data = (Elem *)malloc(sizeof(Elem)*maxSize);
    queue->rear = 0;
    queue->front = 0;
    queue->size = 0;
    queue->MaxSize = maxSize;
}

// 入队 
void enSqQueue(SqQueue *queue, Elem elem){
    ifqueue->size >= queue->MaxSize ) return;
    *(queue->data+queue->rear) = elem;
    queue->rear = (queue->rear+1)%queue->MaxSize;
    queue->size++;
}

// 出队 
Elem deSqQueue(SqQueue *queue){
    if( !queue->size ) return NullElem;
    Elem elem = *(queue->data+queue->front);
    queue->front = (queue->front+1)%queue->MaxSize;
    queue->size--;
    return elem;
}

// 获取当前队列长度 
int getSize(SqQueue *queue){
    return queue->size;
}

// 获取队列容量 
int getMaxSize(SqQueue *queue){
    return queue->MaxSize;
}

// 调试 
void main(void){
    int i;
    SqQueue queue;
    initSqQueue(&queue,50);
    for( i = 0 ; i<10; i++){
        enSqQueue(&queue,i);
        printf("%d\n",i);
    }
    putchar('\n');
    for( i = 0 ; i<5; i++){
        printf("%d\n",deSqQueue(&queue));
    }
    putchar('\n');
    for( i = 50 ; i<55; i++){
        enSqQueue(&queue,i);
        printf("%d\n",i);
    }
    putchar('\n');
    int size = getSize(&queue);
    for( i = 0 ; i<size; i++){
        printf("%d\n",deSqQueue(&queue));
    }

猜你喜欢

转载自www.cnblogs.com/rcklos/p/12907613.html