Bạn thử coding bài này chưa? Không hiểu rõ đề bài lắm?
Đưa code hay ý tưởng của bạn xem sao?
Làm giúp em bài này với!
Tạo 2 stack nối nhau, cuối stack1 nối với stack2,cả 2 cùng có n phần tử,sau đó hiện lên màn hình n ô stack 1 + n ô stack2 và vị trí 2 con trỏ của stack1 và stack2 nằm ngoài các ô đó
Và hiện menu sau:
1.Push1
2.Pop1
3.Push2
4.Pop2
5.Exit
Nếu chọn push1 thì nhâp số đó vào stack1 từ trái sang phải, stack 2 thì ngược lại. Khi nhập đến ô nào thì con trỏ chỉ vào ô đó rồi di chuyển số nhập vào ô đó luôn (số nhập vào cố đinh ở 1 chỗ rồi di chuyển vào các ô)
Khi pop ra thì con trỏ sẻ chỉ vào vị trí lấy số ra và ô đó sẽ để trống.
Giúp minh với!
Bạn thử coding bài này chưa? Không hiểu rõ đề bài lắm?
Đưa code hay ý tưởng của bạn xem sao?
Không biết ghi gì luôn ...
Mô phỏng màn hình như sau
Khi gọi push 1=10 thi` con trỏ (là dấu mủi tên) sẽ di chuyển dến ô số 0 và di chuyển số 10 vào ô số 0.
Khi gọi pop thì ngược lại.Và ô tại vị trí đó sẽ trống.
Ko biết nên bắt đầu từ đâu nên nhờ mọi người jup với!
ht nghĩ, bài này có thể cài đặt theo danh sách liên kết mô phỏng Stack.
Rồi sử dụng hai stack là ok chứ có gì đâu bạn.
Người dùng chọn 1 với 2 thì áp dụng với biến stack 1, còn 3 với 4 thì là stack 2.
Không biết ghi gì luôn ...
Stack1 = head;
Stack2 = tail;
-> double linked list!
cho mình hỏi về thuật toán hiển thị cái menu và thank hiển thi stack theo kiểu hướng đối tượng là như thế nào?(vì hiện giờ mình chỉ biết làm bằng sub-function). mình mới học OOP,chưa hieu rõ lắm về OOP.
Example : không có copy constructor, không có operator = nha cậu. Phần còn lại tui để dành cho cậu vậy.
- t_tail = two stack tailC++ Code:
#include <iostream> #include <cstdlib> struct Node{ int data; Node* back; Node* next; Node(int data, Node* back, Node* next) :data(data), back(back), next(next){ } Node():data(0), back(0), next(0){ } Node(int data):data(data),back(0), next(0){ } }; class TwoStack{ private: Node* t_head; Node* t_tail; int c_size; public: TwoStack(); ~TwoStack(); void first_pop(); void first_push(const int& item); void second_pop(); void second_push(const int& item); void print_test(std::ostream& oss) const; }; TwoStack::TwoStack():t_head(0), t_tail(0), c_size(0){ } TwoStack::~TwoStack(){ Node* des = t_head; while(des != NULL){ t_head = des->next; delete des; des = t_head; } t_head = t_tail = NULL; } void TwoStack::first_pop(){ if(0 == t_head) return; else{ Node* q = t_head; t_head = q->next; t_head->back = 0; delete q; } c_size--; } void TwoStack::second_pop(){ if(0 == t_tail) return; else{ Node* q = t_tail; t_tail = q->back; t_tail->next = 0; delete q; } c_size--; } void TwoStack::first_push(const int& x){ Node* n_n = new Node(x); if(0 == c_size){ t_head = t_tail = n_n; } else{ n_n->next = t_head; t_head = n_n; } c_size++; } void TwoStack::second_push(const int& x){ Node* n_n = new Node(x); if(0 == c_size){ t_head = t_tail = n_n; } else{ Node* q = t_tail; t_tail->next = n_n; t_tail = n_n; t_tail->back = q; } c_size++; } void TwoStack::print_test(std::ostream& oss)const{ Node* it = t_head; while(it != 0){ oss << it->data << " "; it = it->next; } oss << "\n\n"; } int main(){ TwoStack T_T; for(int x = 0; x < 10; ++x){ T_T.first_push(x); } return 0; }
- t_head = two stack head
- n_n = new node
- des = destroyer
- q = temporary node.
- c_size = current size
xài bằng VC ah, C chạy bị lỗi!
Không biết ghi gì luôn ...