Hàng đợi Queue
unknown
c_cpp
5 years ago
2.0 kB
11
Indexable
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
// Tao cau truc Node giong DSLK
struct Node {
int data;
Node *Next;
};
// Tao cau truc Queue
struct Queue {
Node *Head;
Node *Tail;
};
// Ham khoi tao Queue
void init(Queue &Q) {
Q.Head = Q.Tail = NULL;
}
// Ham khoi tao 1 Node
Node *taoNode(int x) {
Node *p = (Node*) malloc(sizeof(Node));
p->Next = NULL;
p->data = x;
return p;
}
// Ham them phan tu co gia tri x vao Queue [viet ham nay phai viet ham taoNode(int x) truoc no]
void push(Queue &Q, int x) {
Node *p = taoNode(x);
if(!Q.Head)
Q.Head = Q.Tail = p;
else {
Q.Tail->Next = p;
Q.Tail = p;
}
}
// Ham lay gia tri phan tu dau tien cua Queue
int getHead(Queue Q) {
if(Q.Head)
return Q.Head->data; // neu lay phan tu cuoi thi Q.Tail->data
return -1;
}
// Ham xoa phan tu dau cua Queue
int Pop(Queue &Q) {
if(Q.Head){
Node *p = Q.Head;
Q.Head = Q.Head->Next;
return p->data;
delete p;
}
return 0;
}
// Ham lay ra phan tu co gia tri x trong Queue
int getNode(Queue Q, int x) {
Node *p = Q.Head;
while(p) {
if(p->data == x)
return 1;
p = p->Next;
}
return 0;
}
// Xuat toan bo Queue
void xuat(Queue Q) {
printf("\nCac phan tu trong Queue: ");
Node *p = Q.Head;
while(p) {
printf("%d ", p->data);
p = p->Next;
}
}
int main() {
Queue Q; init(Q);
int n;
printf("Nhap so phan tu: "); scanf("%d", &n);
while(n--) {
int x;
printf("Nhap phan tu: "); scanf("%d", &x);
push(Q, x);
}
xuat(Q);
// Lay ra phan tu dau tien cua Queue
printf("Phan tu dau tien: %d\n", getHead(Q));
// Tim xem co ton tai phan tu 'tim' hay khong
int tim;
printf("Nhap phan tu can tim: "); scanf("%d", &tim);
if(getNode(Q, tim))
printf("Tim thay!");
else
printf("Khong tim thay!");
}
Editor is loading...