(第6週目プロジェクト2)チェーンスタックアルゴリズムライブラリの構築

3599 ワード

チェーンスタックストレージ構造を定義し、その基本演算を実現し、テストを完了します.
1.ヘッダファイル:listack.h
typedef char ElemType;
typedef struct linknode
{
    ElemType data;              // 
    struct linknode *next;      // 
} LiStack;                      // 

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


2.ソースファイル:listack.cpp
#include <stdio.h>
#include <malloc.h>
#include "listack.h"

void InitStack(LiStack *&s)  // 
{
    s=(LiStack *)malloc(sizeof(LiStack));
    s->next=NULL;
}

void DestroyStack(LiStack *&s)  // 
{
    LiStack *p=s->next;
    while (p!=NULL)
    {
        free(s);
        s=p;
        p=p->next;
    }
    free(s);    //s , 
}

int StackLength(LiStack *s)  // 
{
    int i=0;
    LiStack *p;
    p=s->next;
    while (p!=NULL)
    {
        i++;
        p=p->next;
    }
    return(i);
}

bool StackEmpty(LiStack *s)  // 
{
    return(s->next==NULL);
}

void Push(LiStack *&s,ElemType e)  // 
{
    LiStack *p;
    p=(LiStack *)malloc(sizeof(LiStack));
    p->data=e;              // e *p
    p->next=s->next;        // *p 
    s->next=p;
}

bool Pop(LiStack *&s,ElemType &e)  // 
{
    LiStack *p;
    if (s->next==NULL)      // 
        return false;
    p=s->next;              //p 
    e=p->data;
    s->next=p->next;        // *p 
    free(p);                // *p 
    return true;
}

bool GetTop(LiStack *s,ElemType &e)  // 
{
    if (s->next==NULL)      // 
        return false;
    e=s->next->data;
    return true;
}

void DispStack(LiStack *s)  // 
{
    LiStack *p=s->next;
    while (p!=NULL)
    {
        printf("%c ",p->data);
        p=p->next;
    }
    printf("
"); }

3.main関数を作成します.
#include <stdio.h>
#include "listack.h"

int main()
{
    ElemType e;
    LiStack *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; }