- Back to Home »
- Cplusplus »
- [C++] Ví dụ về danh sách liên kết kép
Đề bài: Dùng danh sách liên kết kép để in ra các số theo chiều thứ tự vào trước ra trước và vào trước ra sau, tìm kiếm một phần tử trong danh sách và đưa ra vị trí.
#include <iostream>
using namespace std;
struct node
{
int data;
node *next;
node *pre;
};
struct list
{
node *first;
node *last;
};
void init(list & l)
{
l.first=NULL;
l.last=NULL;
}
//Tao moi mot phan tu co thanh phan du lieu n
node *get_node(list &l)
{
int n;
node *p=new node();
if(p==NULL)
{
cout<<" Khong cap phat duoc o nho! ";
}
else
{
cout<<"n= ";
cin>>n;
p->next=NULL;
p->data=n;
p->pre=NULL;
}
return p;
}
void chen_dau(list &l,node *p)
{
if(l.first==NULL)
{
l.first=p;
l.last=p;
}
else
{
p->next=l.first;
l.first->pre=p;
l.first=p;
}
}
void creatalist_head(list &l)
{
int n;
node *p;
cout<<" Nhap so phan tu cua danh sach la n= ";
cin>>n;
cout<<"Bat dau nhap "<<endl;
for(int i=0;i<n;i++)
{
p=get_node(l);
chen_dau(l,p);
}
}
void in_xuoi(list l)
{
node *p=l.first;
cout<<"Danh sach vua nhap theo chuoi nguoc la: "<<endl;
while (p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
}
void in_nguoc(list l)
{
node *p=l.last;
cout<<"Danh sach vua nhap theo chieu xuoi la: "<<endl;
while (p!=NULL)
{
cout<<p->data<<" ";
p=p->pre;
}
}
node *tim_kiem(list l, int x)
{
node *p =l.first;
int index;
index=1;
while (p!=NULL)
{
if(p->data==x)
cout <<"Vi tri can tim la: "<<index <<endl;
p=p->next;
index++;
}
return(p);
}
int main()
{
int k;
list l;
init(l);
creatalist_head(l);
in_xuoi(l);
cout <<endl;
in_nguoc(l);
cout <<endl<<endl<<endl;
cout <<"Nhap phan tu muon tim kiem: ";
cin >>k;
tim_kiem(l,k);
return 0;
}