Cài đặt stack bằng danh sách liên kết đơn

em mới tìm hiểu về stack , anh chị cho em hỏi cài stack bằng mảng có gì khác với danh sách liên kết đơn vậy ạ , ưu và nhược điểm của mỗi loại là gì vậy ạ .
em cảm ơn

Thế bạn đã biết mảng và dslk đơn khác gì nhau chưa

3 Likes

Cuong_Nguyen_Huu:

mảng có gì khác với danh sách liên kết đơn

Kết quả ở trang đầu tiên

2 Likes

Home Categories FAQ/Guidelines Terms of Service Privacy Policy

Yêu cầu:

Minh họa cài đặt stack bằng danh sách liên kết. Mỗi phần tử của stack sẽ chứa 1 số nguyên. Do vậy mỗi node của danh sách liên kết sẽ gồm 1 trường dữ liệu kiểu int, 1 con trỏ next. Thao tác loại bỏ (pop()) hay bổ sung (push()) sẽ thực hiện với ô đầu tiên của danh sách liên kết.


Các phép toán cơ bản: 1. Khởi tạo 2. Kiểm tra ngăn xếp rỗng: 3. Nạp vào : nạp phần tử vào đầu ngăn xếp 4. Lấy ra : trả lại giá trị của phần tử ở đầu ngăn xếp và xóa bỏ phần tử đó khỏi ngăn xếp

5. Hiển thị các phần tử của ngăn xếp

/*  * To change this license header, choose License Headers in Project Properties.  * To change this template file, choose Tools | Templates  * and open the template in the editor.  */ /*  * File:   khoa.cpp  * Author: KHOA  *  * Created on August 26, 2016, 9:16 AM  */ #include <iostream> #include<stdio.h> #include<stdio.h> using namespace std; struct Node {     int data;     Node *next; }; struct List {     Node *head;     Node *tail; }; // khoi tao stack void Init(List &s) {     s.head = s.tail = NULL; } // kiem tra stack co rong khong bool isEmpty(List &s) {     if (s.head == NULL) return true;     else return false; } // tao Node Node *creat_Node(int x) {     Node *p = new Node;     if (p != NULL) {         p->data = x;         p->next = NULL;     } else return NULL; } // Push vao stack void push(List &s, int x) {     Node *p = creat_Node(x);     if (isEmpty(s)) {         s.head = s.tail = p; // neu stack rong thi ta gan p la phan tu dau va cuoi     } else {         p->next = s.head; // cho phan tu ke tiep bang phan tu dau         s.head = p; // cap nhat phan tu dau la phan tu moi them vao     } } // Pop phan tu ra khoi stack void pop(List &s) {     Node *p = s.head;     if (!isEmpty(s)) {         s.head = p->next;         delete p;     } else {         cout << "\nDanh sach da rong! ";     } } // tim kiem phan tu trong stack Node *search_Node(List &s, int x) {     Node *q = s.head;     while (q != NULL) {         if (q->data == x) {             return q;         } else {             q = q->next;         }     }     return NULL; } // Nhap du lieu cho Stack void nhap(List &s) {     int n;     cout << "nhap so luong phan tu cho stack: ";     cin>>n;     for (int i = 1; i <= n; i++) {         int x;         cout << "Phan tu " << i << ": ";         cin>>x;         push(s, x);     } } // xuat cac phan tu trong stack void xuat(List &s) {     Node *p = s.head;     while (p != NULL) {         cout << " " << p->data;         p = p->next;     } } int main() {     List s;     Init(s);     nhap(s);     xuat(s);     int x;     int lc;     do {         cout << "\n_ _ _CHUONG TRINH STACK_ _ _";         cout << endl;         cout << " 1.Push Stack"                 << "\n 2.Pop Stack"                 << "\n 3.Tim phan tu"                 << "\n 4.Thoat";         cout << "\nNhap thong tin can kiem tra: ";         cin>>lc;         switch (lc) {             case 1: cout << "Nhap phan tu can Push: ";                 cin>>x;                 push(s, x);                 break;             case 2: cout << "Pop phan tu trong Stack ";                 pop(s);                 cout << "\n";                 break;             case 3: cout << "Nhap phan tu can tim kiem: ";                 cin>>x;                 if (search_Node(s, x) != NULL) cout << "Tim thay phan tu!\n";                 else cout << "khong tim thay!\n";                 break;             case 4: break;             default: cout << "Ban nhap sai ";         }         xuat(s);         cout << "\n";     } while (lc != 4);     return 0; }

STACK - HÀNG ĐỢI

a)Khái niệm

nNgăn xếp là một danh sách tuyến tính trong đó phép bổ sung và phép loại bỏ phần tử được thực hiện ở một đầu gọi là đỉnh (Top).

n Ngăn xếp một danh sách kiểu LIFO (Last In - Firts Out).

n Hai phép toán chính của stack:

push() - thêm một nút đỉnh

pop() - lấy đi một nút ở đỉnh

nCấu trúc dữ liệu của ngăn xếp:

//Khai báo kiểu Item (nếu cần)

struct node{

Item infor;

node *next;

}

struct node *s;//khai báo stack S là con trỏ trỏ và đỉnh stack

(1) Khởi tạo ngăn xếp rỗng

void create(struct node *s){
s = NULL;
}


(2) Kiểm tra ngăn xếp rỗng

int Empty(struct node *s){
return (s == NULL);
}

(3) Thêm một phần tử x vào đỉnh ngăn xếp:

void Push(struct node *s, item x){

struct node *p;
p= new node;
p->infor= x;
p->next= NULL;
if (s==NULL) s= p;
else{
p->next = s;
s= p;
}
}

(4) Loại bỏ một phần tửđỉnh ngăn xếp:

int Pop(struct Stack *s, item &x){
else{
p= s; x= s->infor;
delete p; return 1;
}
struct node *p;
if (Empty(s) ) return 0;
p= new node;
s= s->next;
}

QUEUE - HÀNG ĐỢI:\
a)Khái niệm
- Hàng đợi kiểu danh sách tuyến tính, trong đó phép bổ sung một phần tử được thực hiệnmột đầu gọi lối sau (rear) phép loại bỏ một phần tử được thực hiệnđầu kia gọi lối trước (front) của hàng đợi.
- Hàng đợi kiểu danh sách dạng FIFO (First In-First Out).

nCấu trúc dữ liệu của hàng đợi:

//Khai báo kiểu Item (nếu cần)

struct node{
Item infor;
struct node *rear;
struct queue q;
node *next;
};
struct queue{
struct node *front;
};

(1) Khởi tạo hàng đợi rỗng:

void create(struct queue *q){

q->front = NULL;

q->rear= NULL;

}

(2) Kiểm tra hàng đợi rỗng:

int Empty(struct queue q){

return (q.front == NULL) ;

}

(3) Thêm một phần tử x vào lối sau của hàng đợi:

void Push(struct queue *q, item x){

struct node *p;

p= new node;

p->infor= x;

p->next= NULL;

if (Empty(*q)){

q->front= p;

q->rear=p;

}

else{

q->rear->next = p;

q->rear= p;

delete p;

}

}

(4) Loại bỏ một phần tửlối trước của hàng đợi:

int Pop(struct queue *q, item &x){

struct node *p;

if (Empty(*q)) return 0;

else{

p= new node;

p= q->front;

x= q->front->infor;

q->front= q->front->next;

delete p;

return 1;

}

}

Ngoài ra các bạn có thẻ tham khảo code mấu, bài tập và slide ở dưới


CHU HẢI ĐĂNG

Học viện công nghẹ bưu chính viễn thông Hà Nội.

Phone: 01658991973

Email:

Facebook://www.facebook.com/HaiDangChu

y! : chu.haidang

Video liên quan

Chủ đề