Từ 1 tới 2 trên tổng số 2 kết quả

Đề tài: cách cài đặt stack trong MFC như thế nào?

  1. #1
    Ngày gia nhập
    10 2009
    Bài viết
    6

    Mặc định cách cài đặt stack trong MFC như thế nào?

    bạn nào biết cách cài đặt 1 stack trong MFC không> mình đã thử làm mà vẫn chưa đc


    Code:
    void start()
    {
    	top=-1;
    }
    bool isEmpty(){
    	if(top==-1)
    		return true;
    	return false;
    }
    bool isFull(){
    	if(top==MAX_S-1)
    		return true;
    	return false;
    }
    bool PUSH(char x){
    	if(isFull)
    		return false;
    	Stack[top+1]=x;
    	top++;
    	return true;
    }
    char POP(){
    	char x;
    	if(isEmpty)
    		return false;
    	x=Stack[top];
    	top--;
    	return x;
    
    }

  2. #2
    Ngày gia nhập
    04 2010
    Bài viết
    15

    Bạn đọc bài này tham khảo nha:
    Code:
    #include <stdio.h> 
    #include <iostream.h> 
    #include <alloc.h> 
    #include <stdlib.h> 
    #include <string.h> 
     /* 
    typedef enum boolean 
    { 
       false = 0, true = 1, 
    } bool;*/ 
      
    template<class T> class MyStack //class stack
    { 
        T *m_data; //Con tro lop
        int m_numElements; 
      
    public: 
      
        MyStack() : m_data(NULL), m_numElements(0) { } //Tao stack
      
        ~MyStack() //Ham huy stack
        { 
            free(m_data); 
            m_data = NULL; 
            m_numElements = 0; 
        } 
      
        bool empty() 
        { 
            free(m_data); 
            m_data = NULL; 
            m_numElements = 0; 
            return true; //Ham xac dinh giai phong stack
        } 
      
        bool push(T data) 
        { 
          if(m_data == NULL) // root node 
            { 
                m_numElements = 1; 
                m_data = (T*) malloc(sizeof(T)); //Cap phat cho T
            } 
            else 
            { 
              m_numElements++; 
                m_data = (T*) realloc(m_data, m_numElements * sizeof(T)); //Cap phat cho mdata
                memmove(&m_data[1], m_data, (m_numElements - 1) * sizeof(T)); //ham nay ko biet:(
            } 
            m_data[0] = data; 
            return true; 
        } 
      
      
      
        int pop() 
        { 
            int result = -1; 
          if(m_data == NULL) // root node 
            { 
                m_numElements = 0; 
                return -1; 
            } 
            else 
          { 
                result = top(); 
                if(m_numElements == 1) 
                { 
                    // last item 
                    m_numElements = 0; 
                    free(m_data); 
                m_data = NULL; 
                } 
                else 
                { 
                    m_numElements--; 
                    memmove(m_data, &m_data[1], m_numElements * sizeof(T)); 
                m_data = (T*) realloc(m_data, m_numElements * sizeof(T)); 
                } 
          } 
          return result; 
        } 
      
        int size() 
        { 
          return m_numElements; 
        } 
      
        T top(); 
        void PrintStack(); 
    }; 
      
    int MyStack<int>::top() 
        { 
          if(m_numElements > 0) 
              return m_data[0]; 
        } 
      
    void MyStack<int>::PrintStack() 
    { 
          int i = 0; 
          printf("["); 
          for(i = m_numElements - 1; i >= 0; i--) 
          { 
              printf("%d", m_data[i]); 
          } 
          printf("]"); 
    } 
      
    static int movecount = 0; 
    static int countA = 0; 
    static int countB = 0; 
    static int countC = 0; 
      
    static MyStack<int> *A = 0; 
    static MyStack<int> *B = 0; 
    static MyStack<int> *C = 0; 
      
    void PrintStacks() 
    { 
        if (countA != A->size() || 
            countB != B->size() || 
          countC != C->size()) 
        { 
            int diffA = A->size() - countA; 
            int diffB = B->size() - countB; 
          int diffC = C->size() - countC; 
            if (diffA == 1) 
            { 
                if (diffB == -1) 
                    printf("Move Disc %d From B To A", A->top()); 
                else 
                    printf("Move Disc %d From C To A", A->top()); 
            } 
            else if (diffB == 1) 
          { 
                if (diffA == -1) 
                    printf("Move Disc %d From A To B", B->top()); 
                else 
                printf("Move Disc %d From C To B", B->top()); 
            } 
            else //if (diffC == 1) 
            { 
                if (diffA == -1) 
                    printf("Move Disc %d From A To C", C->top()); 
                else 
                printf("Move Disc %d From B To C", C->top()); 
            } 
          countA = A->size(); 
            countB = B->size(); 
            countC = C->size(); 
            printf("\n"); 
        } 
      
        A->PrintStack(); 
        printf(" , "); 
        B->PrintStack(); 
        printf(" , "); 
        C->PrintStack(); 
        printf(" , "); 
    } 
      
    void Solve2DiscsTOH(MyStack<int> *source, MyStack<int> *temp, MyStack<int> *dest) 
    {            
        temp->push(source->pop()); 
        movecount++; 
        PrintStacks(); 
      
        dest->push(source->pop()); 
        movecount++; 
        PrintStacks(); 
      
        dest->push(temp->pop()); 
        movecount++; 
        PrintStacks(); 
    } 
      
    int SolveTOH(int nDiscs, MyStack<int> *source, MyStack<int> *temp, MyStack<int> *dest) 
    { 
        if (nDiscs <= 4) 
        { 
            if ((nDiscs % 2) == 0) 
            { 
                Solve2DiscsTOH(source, temp, dest); 
                nDiscs = nDiscs - 1; 
                if (nDiscs == 1) 
                    return 1; 
      
                temp->push(source->pop()); 
                movecount++; 
                PrintStacks(); 
                //new source is dest, new temp is source, new dest is temp; 
                Solve2DiscsTOH(dest, source, temp); 
      
                dest->push(source->pop()); 
                movecount++; 
                PrintStacks(); 
                //new source is temp, new temp is source, new dest is dest; 
                SolveTOH(nDiscs, temp, source, dest); 
            } 
            else 
            { 
                if (nDiscs == 1) 
                    return 0; 
                Solve2DiscsTOH(source, dest, temp); 
                nDiscs = nDiscs - 1; 
                dest->push(source->pop()); 
                movecount++; 
                PrintStacks(); 
                Solve2DiscsTOH(temp, source, dest); 
            } 
            return 1; 
        } 
        else if (nDiscs >= 5) 
        { 
            SolveTOH(nDiscs - 2, source, temp, dest); 
            temp->push(source->pop()); 
            movecount++; 
            PrintStacks(); 
            SolveTOH(nDiscs - 2, dest, source, temp); 
            dest->push(source->pop()); 
            movecount++; 
            PrintStacks(); 
            SolveTOH(nDiscs - 1, temp, source, dest); 
        } 
        return 1; 
    } 
      
    int main() 
    { 
        int sz, i, maxdisc; 
        A = (MyStack<int>*) malloc(sizeof(MyStack<int>)); 
        B = (MyStack<int>*) malloc(sizeof(MyStack<int>)); 
        C = (MyStack<int>*) malloc(sizeof(MyStack<int>)); 
      
        while(1) 
        { 
            printf("\nEnter the number of discs (-1 to exit): "); 
            scanf("%d", &maxdisc); 
            if(maxdisc == -1) 
                break; 
            if(maxdisc < 2 || maxdisc > 9) 
            { 
                printf("Enter between 2 - 9"); 
                continue; 
            } 
      
            movecount = 0; 
            memset((void*)A, 0, sizeof(MyStack<int>)); 
            memset((void*)B, 0, sizeof(MyStack<int>)); 
            memset((void*)C, 0, sizeof(MyStack<int>)); 
            for (i = maxdisc; i >= 1; i--) 
                A->push(i); 
            countA = A->size(); 
            countB = B->size(); 
            countC = C->size(); 
            PrintStacks(); 
            SolveTOH(maxdisc, A, B, C); 
            printf("Total Moves = %d", movecount); 
            C->empty(); 
        } 
      
        return 0; 
    }

    Chia tay chia tay chiều mưa miên man
    Bong bóng phập phồng lòng ai chứa chan
    Đừng khóc nhé mưa ơi nhạt nhòa lắm
    Chiều phân vân...Cầu vồng xa xăm

Các đề tài tương tự

  1. Thắc mắc về Stack trong java
    Gửi bởi yongie36 trong diễn đàn Nhập môn lập trình Java
    Trả lời: 1
    Bài viết cuối: 04-10-2013, 04:06 PM
  2. Cấu trúc dữ liệu Chuyển các phần tử từ stack này sang stack kia như thế nào?
    Gửi bởi rukawa1184 trong diễn đàn Thắc mắc CTDL & Giải thuật
    Trả lời: 9
    Bài viết cuối: 06-12-2011, 06:52 PM
  3. Stack, ngăn xếp - Thiết lập và ứng dụng stack trong C
    Gửi bởi PoPoPoPo trong diễn đàn Thủ thuật, Tutorials CTDL & Giải thuật
    Trả lời: 8
    Bài viết cuối: 15-11-2010, 11:24 PM
  4. Stack trên C | Lỗi khó hiểu trong Stack
    Gửi bởi tom3cang trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 22-05-2009, 11:09 PM
  5. Cách dùng stack trong lập trình C# như thế nào?
    Gửi bởi minhdv85 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 5
    Bài viết cuối: 23-03-2009, 10:16 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn