23 thg 10, 2010

Danh sách liên kết - Xóa phần tử cuối cùng của danh sách

Danh sách liên kết - Xóa phần tử cuối cùng của danh sách

Đăng ngày: 12:57 22-01-2010
Thư mục: C++
*===Coding by onlinexanh@yahoo.com===*/
#include<iostream.h>
#include<conio.h>

struct node //Định nghĩa node
{
float info;
node *next;
};

struct list //Định nghĩa danh sách
{
node *first;
node *last;
};

void KhoiTao(list &d) //Khởi tạo danh sách
{
d.first = d.last = NULL;
}

void Xem(list d) //Xem danh sách
{
if(d.first==NULL) {cout<<"\nDanh sach rong"; return;}
node *p = d.first;
while(p!=NULL)
{
cout<<"\n"< info;
p = p->next;
}
}

void ThemDau(list &d, float x) //Thêm phần tử vào đầu danh sách
{
node *p = new node; //Khai báo con trỏ kiểu node
p->info = x;
p->next = NULL;
if(d.first==NULL)
{
    d.first = d.last = p;
}
else
{
    p->next = d.first; //p trỏ tới node đầu của danh sách
d.first = p; //p trở thành node đầu của danh sách
}
}

void ThemCuoi(list &d, float x) //Thêm phần tử vào cuối danh sách
{
node *p = new node; //Khai bảo con trỏ kiểu node
p->info = x;
p->next = NULL;

if(d.first==NULL) //Nếu danh sách rỗng
{
d.first = d.last = p;
}

else
{
d.last->next = p; //Node cuối của danh sách trỏ tới p
d.last = p; //p trở thành node cuối mới của danh sách
}
}

void XoaCuoi(list &d) //Xóa phần tử cuối cùng của danh sách
{
if(d.first==NULL) return; //Nếu danh sách rỗng thì thoát khỏi hàm
node *p = d.first; //khai báo con trỏ gán với node đầu của danh sách
node *r = d.last; //khai báo con trỏ gán với node cuối của danh sách
if(p==r) //Nếu danh sách chỉ có một node
{
d.first=d.last=NULL;
delete p;
}
else //Nếu không p chạy tới node cận cuối cùng
{
while(p->next!=r) p = p->next;
p->next = NULL; //p trỏ đến NULL
d.last = p; //Node cận cuối p trở thành node cuối
delete r; //Xóa node cuối ban đầu
}
}

void main()
{
clrscr();
struct list d;
KhoiTao(d);
ThemDau(d,1);
ThemCuoi(d,3);
ThemCuoi(d,5);
ThemDau(d,2);
XoaDau(d);
Xem(d);
getch();
}

Không có nhận xét nào:

Đăng nhận xét