第6週--プロジェクト2--チェーンスタック計算ライブラリの構築

3437 ワード

問題およびコード:
/*2015,         
  * :         
  * :2015 10 5         
  * :v1.0       
       
  * : , , 。 
*/    
#ifndef TOU_H_INCLUDED
#define TOU_H_INCLUDED
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);  // 

#endif // TOU_H_INCLUDED
#include <stdio.h>
#include <malloc.h>
#include "tou.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("
"); }
#include <stdio.h>
#include "tou.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; }
   <img src="http://img.blog.csdn.net/20151007174441684?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />