c語言實現數組棧


  已經十一點,這是今天的第三篇博客了,為什么今天要寫這么多呢。因為這些代碼是之前寫好的,寫起來比較快。當然不是這個原因,真正的原因是下午玩了一下午游戲,好累,想睡覺,躺在床上看了一篇不知哪年畢業的學長講他面試的經歷的博客。我被刺激到了。呵呵。。。

  對於棧的性質和定義我就不多說了。之前利用棧寫過表達式計算器,有興趣的同學可以試試。遞歸與棧的聯系很密切,應該說遞歸就是靠棧來實現的。

astack.h

#ifndef _STACK_H
#define _STACK_H

#define MAXSIZE 10

typedef struct stack
{
    int * arr;//循環隊列首地址
    int size;//大小
} Stack;

void s_init(Stack * stack);//初始化
int s_size(Stack * stack);//棧大小
void s_push(Stack * stack, const int data);//入棧
void s_pop(Stack * stack);//出棧
int s_top(Stack * stack);//棧頂
bool s_empty(Stack * stack);//為空
bool s_full(Stack * stack);//為滿
void s_destroy(Stack * stack);//銷毀

#endif //_STACK_H

astack.c

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

#include "astack.h"

void s_init(Stack * stack)
{
    stack->arr = (int *)malloc( sizeof(int) * MAXSIZE );//創建一個循環隊列的數組
    stack->size = 0;//初始化大小為0
}

int s_size(Stack * stack)
{
    assert(stack->size > 0);
    return stack->size;//返回元素個數
}

void s_push(Stack * stack, const int data)
{
    if ( s_full(stack) )//當隊列為滿時,不能進行入棧操作
        return;
    stack->arr[stack->size] = data;//棧頂指針=size-1,而要添加的位置是 棧頂指針+1,也就是size
    stack->size++;
}

void s_pop(Stack * stack)
{
    if ( s_empty(stack) )//當隊為空時,不能進行出隊操作
        return;
    stack->size--;//出隊只需將棧頂指針-1,也就是size-1
}

int s_top(Stack * stack)
{
    assert(stack->size > 0 );
    return stack->arr[stack->size - 1];//size-1才是棧頂元素
}

bool s_empty(Stack * stack)
{
    return stack->size == 0;
}

bool s_full(Stack * stack)
{
    return stack->size == MAXSIZE;
}

void s_destroy(Stack * stack)
{
    free(stack->arr);
}

2016-01-10


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM