30/09/2018, 20:37

Hàng đợi ưu tiên

Mn giúp em bài này với. Nó cứ báo hàng đợi rỗng. e k biết sai ở đâu

#include<iostream>
using namespace std;
struct node {
	int data;
	int prior;
	struct node *next;
}*front;
void init(){
	front =NULL;
}
void push(int x,int prior){
	node *p,*s;
	p->data=x;
	p->prior=prior;
	if(front ==NULL || prior > front->prior){
		p->next=front;
		front =p;
	}
	else {
		s=front;
		while(s->next!=NULL && s->next->prior<=prior){
			s=s->next;
		}
		p->next=s->next;
		s->next=p;
	}
}
/*void pop(){
	node *s=front;
	if(front==NULL) cout<<" hang doi rong."<<endl;
	else {
		
	}
}
*/
void hienthi(){
	node *s=front;
	if(front ==NULL) cout<<" hang doi rong.";
	else {
		cout<<"
 Gia tri: "<<"	 "<<" Do uu tien"<<endl;
		while(s!=NULL){
			cout<<s->data<<"	 "<<s->prior;
			s=s->next;
		}
	}
}
void nhap(int x,int prior){
	while(1){
		if(x!=0){
		cout<<"nhap gia tri: "; cin>>x;
		cout<<"nhap do uu tien: "; cin>>prior;
		push(x,prior);
		}
		else break;
	}
}
int main(){
	int x,prior;
	init();
	nhap(x,prior);
	hienthi();
}
Do Quang Duy viết 22:51 ngày 30/09/2018

Hàm nhap( ) sẽ đòi nhập x và prior đến khi x khác 0 thì thôi.

while(1){
		if(x!=0){
		cout<<"nhap gia tri: "; cin>>x;
		cout<<"nhap do uu tien: "; cin>>prior;
		push(x,prior);
		}
		else break;
	}

Nhưng trong hàm main( ) cậu mới chỉ khai báo 2 biến nguyên x, prior chứ chưa khởi tạo giá trị đầu cho nó:

int x,prior;
	init();
	nhap(x,prior);
	hienthi();

Nên nếu x = 0 ngay từ đầu thì vòng while trong hàm nhap( ) không chạy, không có dữ liệu vào --> Hàng đợi rỗng.
Mình thử khởi tạo x = 1 ngay từ đầu thì chạy được.

Nguyễn Trọng viết 22:41 ngày 30/09/2018

nếu không khởi đầu cho biến thì DevC sẽ gán cho giá trị biến = 0, với con trỏ = NULL, tuy nhiên không nên áp dụng điều này.
để tránh, bạn nên:
while(1)
{
cin>>x;
… //như bạn code
}

Bài liên quan
0