[데이터 구조] 순서 구조 구현 스 택

9687 단어 데이터 구조
1. 상관 개념
스 택: 특수 한 선형 표 로 고정된 한 끝 에 만 요 소 를 삽입 하고 삭제 할 수 있 습 니 다.
데 이 터 를 삽입 하고 삭제 하 는 작업 의 한 끝 을 스 택 지붕 이 라 고 하고 다른 한 끝 은 스 택 바닥 이 라 고 합 니 다.어떠한 요소 도 포함 하지 않 은 스 택 을 빈 스 택 이 라 고 부 르 고 스 택 은 후진 선 출 의 선형 표 라 고도 부른다.
창고 의 특징: 후진 선 출 (LIFO)
2. 순서 구조 구현 스 택
코드 는 다음 과 같 습 니 다:
  • stack.h
  • //       
    #ifndef __STACK_H__
    #define __STACK_H__
    
    #include 
    #include 
    #include 
    using namespace std;
    
    #define STACK_DEFAULT_SIZE 10 //     
    
    typedef int ElemType;
    
    typedef struct Stack
    {
        ElemType* base;
        int top;
        int capacity;
    }Stack;
    
    void menu(); //  
    void InitStack(Stack* s); //    
    bool IsFull(Stack* s); //       
    bool IsEmpty(Stack* s); //       
    bool Push(Stack* s, ElemType x); //  
    bool Pop(Stack* s, ElemType* x); //  
    int Lenth(Stack* s); //   
    bool GetTop(Stack* s, ElemType *x); //      
    void ShowStack(Stack* s); //      
    void Clear(Stack* s); //   
    void Destroy(Stack* s); //   
    
    #endif //__STACK_H__
  • stack.cpp
  • //       
    #include "stack.h"
    
    void menu() //  
    {
        cout << "*******************************************" << endl;
        cout << "*************  【SeqStack】  **************" << endl;
        cout << "*** [1]Push      [2]Pop        [3]lenth ***" << endl;
        cout << "*** [4]GetTop    [5]ShowStack  [6]Clear ***" << endl;
        cout << "*************   【HaHaHa】   **************" << endl;
        cout << "*******************************************" << endl;
    }
    
    void InitStack(Stack* s) //    
    {
        ElemType* p = (ElemType*)malloc(sizeof(ElemType)* STACK_DEFAULT_SIZE);
        assert(p != NULL);
        s->base = p;
        s->capacity = STACK_DEFAULT_SIZE;
        s->top = 0;
    }
    
    bool IsFull(Stack* s) //       
    {
        return s->top == s->capacity;
    }
    
    bool IsEmpty(Stack* s) //       
    {
        return s->top == 0;
    }
    
    bool Push(Stack* s, ElemType x) //  
    {
        if (IsFull(s))
        {
            cout << "   !" << endl;
            return false;
        }
        s->base[s->top++] = x;
        return true;
    }
    
    bool Pop(Stack* s, ElemType* x) //  
    {
        if (IsEmpty(s))
        {
            cout << "   !" << endl;
            return false;
        }
        *x = s->base[--s->top];
        return true;
    }
    
    int Lenth(Stack* s) //   
    {
        return s->top;
    }
    
    bool GetTop(Stack* s, ElemType *x) //      
    {
        if (IsEmpty(s))
        {
            cout << "   !" << endl;
            return false;
        }
        *x = s->base[--s->top];
        return true;
    }
    
    void ShowStack(Stack* s) //      
    {
        int i = 0;
        for (i = s->top - 1; i >= 0; --i)
        {
            cout << s->base[i] << "—>";
        }
        cout << "NULL" << endl;
    }
    
    void Clear(Stack* s) //   
    {
        s->top = 0;
        s->capacity = 0;
    }
    
    void Destroy(Stack* s) //   
    {
        Clear(s);
        free(s->base);
        s->base = NULL;
    }
  • main.cpp
  • //       
    #include "stack.h"
    
    int main()
    {
        Stack s;
        ElemType item;
        int select = 1;
        InitStack(&s);
        while (select)
        {
            menu();
            cout << "   : " << endl;
            cin >> select;
            switch (select)
            {
            case 1:
                cout << "   : ";
                while (cin >> item, item != -1)
                {
                    Push(&s, item);
                }
                break;
            case 2:
                Pop(&s, &item);
                cout << item << endl;
                break;
            case 3:
                cout << "   : " << Lenth(&s) << endl;
                break;
            case 4:
                GetTop(&s, &item);
                cout << "     : " << item << endl;
                break;
            case 5:
                ShowStack(&s);
                break;
            case 6:
                Clear(&s);
                break;
            default:
                break;
            }
        }
        Destroy(&s);
        return 0;
    }

    이렇게 해서 순서 구조 가 스 택 을 실현 하면 ok 입 니 다.
    얘 들 아, 참고 할 수 있 으 니까 지적 도 해 줘.

    좋은 웹페이지 즐겨찾기