第6週のオンサイト実践—プロジェクト1—順序スタックアルゴリズムライブラリの構築

3761 ワード

/*
 *Copyright(c) 2015,         
 *All rights reserved.
 *    :test.cpp
 *  :  
 *    :2015 10 05 
 *  :v1.0
 *
 *    :         ,       ,     。
 *    : 
 *    :      
 */

1.ヘッダファイル:sqstack.h、シーケンススタックデータ構造を定義するコード、マクロ定義、アルゴリズムを実現する関数の宣言を含む.
#ifndef SQSTACK_H_INCLUDED
#define SQSTACK_H_INCLUDED

#define MaxSize 100
typedef char ElemType;
typedef struct
{
    ElemType data[MaxSize];
    int top;                //   
} SqStack;                  //       

void InitStack(SqStack *&s);    //    
void DestroyStack(SqStack *&s);  //   
bool StackEmpty(SqStack *s);     //     
int StackLength(SqStack *s);  //        ——   
bool Push(SqStack *&s,ElemType e); //  
bool Pop(SqStack *&s,ElemType &e); //  
bool GetTop(SqStack *s,ElemType &e); //       
void DispStack(SqStack *s);  //   

#endif // SQSTACK_H_INCLUDED

2.ソースファイル:sqstack.cpp,各種アルゴリズムを実現する関数の定義を含む
#include <stdio.h>
#include <malloc.h>
#include "sqstack.h"

void InitStack(SqStack *&s)
{
    s=(SqStack *)malloc(sizeof(SqStack));
    s->top=-1;
}
void DestroyStack(SqStack *&s)
{
    free(s);
}
int StackLength(SqStack *s)  //        ——   
{
    return(s->top+1);
}
bool StackEmpty(SqStack *s)
{
    return(s->top==-1);
}
bool Push(SqStack *&s,ElemType e)
{
    if (s->top==MaxSize-1)    //     ,     
        return false;
    s->top++;
    s->data[s->top]=e;
    return true;
}
bool Pop(SqStack *&s,ElemType &e)
{
    if (s->top==-1)     //      ,     
        return false;
    e=s->data[s->top];
    s->top--;
    return true;
}
bool GetTop(SqStack *s,ElemType &e)
{
    if (s->top==-1)         //      ,     
        return false;
    e=s->data[s->top];
    return true;
}

void DispStack(SqStack *s)  //   
{
    int i;
    for (i=s->top;i>=0;i--)
        printf("%c ",s->data[i]);
    printf("
"); }

3.テスト関数:main.cpp
#include <stdio.h>
#include "sqstack.h"

int main()
{
    ElemType e;
    SqStack *s;
    printf("(1)    s
"); InitStack(s); printf("(2) %s
",(StackEmpty(s)?" ":" ")); printf("(3) a,b,c,d,e
"); Push(s,'a'); Push(s,'b'); Push(s,'c'); Push(s,'d'); Push(s,'e'); printf("(4) %s
",(StackEmpty(s)?" ":" ")); printf("(5) :%d
",StackLength(s)); printf("(6) :");DispStack(s); printf("(7) :"); while (!StackEmpty(s)) { Pop(s,e); printf("%c ",e); } printf("
"); printf("(8) %s
",(StackEmpty(s)?" ":" ")); printf("(9)
"); DestroyStack(s); return 0; }

実行結果:
知識ポイントのまとめ:
スタックsを初期化し、スタックsが空であるか否かを判断し、順次スタック要素に入り、スタックsが空であるか否かを判断し、スタック長を出力し、スタックトップからスタック底要素に出力し、スタックを出し、スタックシーケンスを出力し、sスタックが空であるか否かを判断し、スタックを解放する.
学習の心得:
これは、「順序テーブル」アルゴリズムライブラリを構築するのと同じです.