01/10/2018, 00:31

Danh sách liên kết đơn mở rộng

Danh sách liên kết đơn mở rộng: Lập danh
Mỗi Node của danh sách cha sẽ chứa 2 con trỏ trỏ đến vị trí đầu và cuối của một danh sách liên kết đơn khác.
DSLK con: có 2 trường : trường thông tin , và con trỏ trỏ đến vị trí tiếp theo.
DSLK cha: có 4 trường : trường thông tin ,con trỏ trỏ đến nút tiếp theo và 2 con trỏ trỏ đến danh sách liên kết con.
Mong cao nhân nào đi qua chỉ giáo. Em làm k nổi.

//Khao bao danh sach và khoi tao
struct line{
	int dong;
	struct line *next;
};


struct node {
	char DATA[30];
	struct node *n;
	struct line *dau;
	struct line *cuoi;

};

struct node* head=NULL;

Thêm phần tử vào danh sách
Thông tin danh sách con em lấy từ một mảng int

struct line *insertDong(int a){
	struct line *p, *q;
    q=(struct line*)malloc(sizeof(struct line));
        q->dong=a;
        if(head->dau==NULL){
            head->dau=q;
            q->next=NULL;
            head->cuoi=q;
            return q;
        }
        else{
            p=head->dau;
            while(p->next!=NULL) p=p->next;
            p->next=q;
            q->next=NULL;
            head->cuoi=q;
            return q;
        }

}
void listDong(int a[],int j){
	int i=0;
	for(i=0; i<j; i++){
	insertDong(a[i]);
	}
}

struct node *AddTail(char x[30], int a[],int j){
	struct node *p, *q;
	q=(struct node*)malloc(sizeof(struct node));
	strcpy(q->DATA, x);
	if(head==NULL){
		head=q;
		q->n=NULL;
		listDong(a,j);
		return (q);
	
	}
	else{
		p=head;
		while(p->n!=NULL) p=p->n;
		p->n=q;
		q->n=NULL;
		listDong(a,j);
		return q;	
	}
}

Xuất danh sách

void xuat(void){
		printf("
Danh sach cac phan tu cua: 
");
		struct node *p =head;
		while(p!=NULL){
			printf("
%s
",p->DATA);
			p=p->n;	
		}
		while(p->dau!=NULL){
			printf("%d",p->dau->dong);
			p->dau=p->dau->next;
		}
}

Bài liên quan
0