Hiện dân mạng tụi mình đang học môn cấu trúc dữ liệu, với vốn kiến thức nông cạn về lập trình, mình xin mạo muội post một số bài về danh sách liên kết đơn (p/s: chỉ mới học tới đây thôi) mong được sự góp ý của mọi người nhé
Với code bên dưới các bạn có thể custom thành bài về danh sách sinh viên hoặc tuơng tự...
Code dưới đây mình sửa lại cho giống như cách viết trong giáo trình CTDL, tức là khi khai báo ta dùng các dấu "**" và "*"
Còn đây là code của mình lúc viết, mình không sử dụng các dấu "**" và "*" trong quá trình viết cho bớt nhập nhằng và dễ nhìnPHP Code:#include<iostream>
using namespace std;
//Khai bao cau truc
struct node
{
int pt;
struct node *next;
};
typedef node list;
list *first,*ds2,*last;
//Xoa sach cac node trong danh sach va khoi tao danh sach
void clear_list(list **first)
{
list *p=*first;
while(*first!=NULL)
{
*first=p->next;
delete(p);
p=*first;
}
}
//In danh sach
void print_list(list *first)
{
if(first==NULL)
cout << "\nDanh sach rong";
else
{
list *p=first;
cout << "\nDanh sach:\n ";
while(p!=NULL)
{
cout << p->pt << "\t";
p=p->next;
}
}
}
//Dem so phan tu trong danh sach
int count_list(list *first)
{
list *p=first;
int c=1;
while(p->next!=NULL)
{
p=p->next;
c++;
}
return c;
}
//Tinh tong gia tri cac phan tu trong danh sach
int sum_list(list *first)
{
list *p=first;
int s=0;
if(first==NULL)
{
cout << "\nDanh sach rong\n";
return 0;
}
else
{
while(p!=NULL)
{
s=s+p->pt;
p=p->next;
}
}
return s;
}
//Tinh gia tri trung binh cac phan tu trong danh sach
float avg_list(list *first)
{
list *p=first;
float avg;
if(first==NULL)
{
cout << "\nDanh sach rong\n";
return 0;
}
return avg=(float)sum_list(p)/(float)count_list(p);
}
//Tra ve node nam o vi tri n
list *position_node(list *first,int n)
{
list *p=first;
int c=1;
while(c<n)
{
p=p->next;
c++;
}
return p;
}
//Chen vao dau danh sach
void insert_first(list **first, int data)
{
list *p;
p=new node;
p->pt=data;
p->next=*first;
*first=p;
}
//Chen cuoi danh sach
void insert_last(int data)
{
list *p;
p=new node;
p->pt=data;
last->next=p;
last=p;
p->next=NULL;
}
//Ham chen node vao danh sach
void insert_node(list **first)
{
int n,x,c;
list *p=*first;
if(p==NULL)
cout << "\nDanh sach rong";
else
{
cout << "\nNhap vi tri can chen: ";
cin >> n;
c=count_list(p);
if(n<1 || n>(c+1))
cout << "\nVi tri khong hop le";
else
{
cout << "\nNhap gia tri cho phan tu: ";
cin >> x;
if(n==1)
insert_first(first,x);
else
{
c=count_list(p);
if(n==c+1)
insert_last(x);
else
{
list *q;
q=new node;
q->pt=x;
q->next=position_node(p,n-1)->next;
position_node(p,n-1)->next=q;
}
}
}
}
}
//Xoa node dau danh sach
void del_first(list **first)
{
list *p;
p=*first;
*first=p->next;
}
//Xoa node cuoi danh sach
void del_last(list **first)
{
list *p=*first;
int c=1;
int n=count_list(p);
while(c<n-1)
{
p=p->next;
c++;
}
delete(last);
last=p;
p->next=NULL;
}
//Xoa 1 node bat ki trong danh sach
void del_node(list **first)
{
list *p=*first;
int n,c;
if(*first==NULL)
cout << "\nDanh sach rong";
else
{
cout << "\nNhap vi tri can xoa: ";
cin >> n;
c=count_list(p);
if(n<1 || n>c+1)
cout << "\nVi tri khong hop le";
else
{
if(n==1)
del_first(first);
else
{
c=count_list(p);
if(n==c)
del_last(first);
else
{
list *q,*t;
q=position_node(p,(n-1));
t=position_node(p,n);
q->next=t->next;
delete(t);
}
}
}
}
}
//Dao nguoc danh sach
void reverse_list(list **first)
{
if(*first==NULL)
return;
list *current,*previous,*f=*first;
current=NULL;
previous=NULL;
while(f!=NULL)
{
current=f;
f=f->next;
current->next=previous;
previous=current;
}
*first=current;
}
//Tim min
list *min_list(list *first)
{
list *p=first,*min=p;
while(p)
{
if(p->pt<min->pt)
min=p;
else
p=p->next;
}
return min;
}
//Sap xep tang dan
void sort_list(list **first)
{
list *p=*first,*q;
int tmp;
while(p->next)
{
q=min_list(p);
tmp=p->pt;
p->pt=q->pt;
q->pt=tmp;
p=p->next;
}
}
//Tao danh sach moi
void create_list(list **first)
{
int n;
list *p;
cout << "\nNhap gia tri: ";
cin >> n;flushall();
while(n!=0)
{
p=new node;
p->pt=n;
if(*first==NULL)
*first=p;
else
last->next=p;
last=p;
p->next=NULL;
cout << "\nNhap gia tri: ";
cin >> n;flushall();
}
}
//Menu chuong trinh
int menu()
{
int n;
do
{
cout << "\n1. Tao danh sach";
cout << "\n2. In danh sach";
cout << "\n3. Xoa phan tu";
cout << "\n4. Chen phan tu vao danh sach";
cout << "\n5. Dao nguoi danh sach";
cout << "\n6. Tinh tong gia tri cac phan tu trong danh sach";
cout << "\n7. Tinh gia tri trung binh gia tri cac phan tu trong danh sach";
cout << "\n8. Dem so phan tu trong danh sach";
cout << "\n9. Nhap tiep vao danh sach";
cout << "\n10. In ra phan tu co gia tri nho nhat trong danh sach";
cout << "\n11. Sap xep danh sach tang dan";
cout << "\n12. Xoa toan bo danh sach";
cout << "\n\n0. Thoat chuong trinh";
cout << "\n\n\tMoi ban chon tinh nang: ";
cin >> n;
}
while(n<0 || n>12);
return n;
}
//Chuong trinh chinh
void main()
{
int chucnang;
do
{
chucnang=menu();
flushall();
switch(chucnang)
{
case 0:
{break;}
case 1:
{system("cls");clear_list(&first);create_list(&first);system("cls");//create_new_list(ds2);
break;}
case 2:
{system("cls");print_list(first);getch();break;}
case 3:
{system("cls");del_node(&first);getch();break;}
case 4:
{system("cls");insert_node(&first);getch();break;}
case 5:
{system("cls");reverse_list(&first);getch();break;}
case 6:
{system("cls");cout << "\nTong gia tri cac phan tu trong danh sach: "<<sum_list(first);getch();break;}
case 7:
{system("cls");cout << "\nGia tri trung binh cac phan tu trong danh sach: "<<avg_list(first);getch();break;}
case 8:
{system("cls");cout << "\nSo phan tu trong danh sach: "<<count_list(first);getch();break;}
case 9:
{system("cls");create_list(&first);getch();break;}
case 10:
{system("cls");cout << "\nGia tri nho nhat trong danh sach: " << min_list(first)->pt;getch();break;}
case 11:
{system("cls");sort_list(&first);getch();break;}
case 12:
{system("cls");clear_list(&first);getch();break;}
}
}
while(chucnang!=0);
}
PHP Code:#include<iostream>
using namespace std;
//Khai bao cau truc
struct node
{
int pt;
struct node *next;
};
typedef node *list;
list first,last;
//Xoa sach cac node trong danh sach va khoi tao danh sach
void clear_list(list &first)
{
list p=first;
while(first!=NULL)
{
first=p->next;
delete(p);
p=first;
}
}
//In danh sach
void print_list(list first)
{
if(first==NULL)
cout << "\nDanh sach rong";
else
{
list p=first;
cout << "\nDanh sach:\n ";
while(p!=NULL)
{
cout << p->pt << "\t";
p=p->next;
}
}
}
//Dem so phan tu trong danh sach
int count_list(list first)
{
list p=first;
int c=1;
while(p->next!=NULL)
{
p=p->next;
c++;
}
return c;
}
//Tinh tong gia tri cac phan tu trong danh sach
int sum_list(list first)
{
list p=first;
int s=0;
if(first==NULL)
{
cout << "\nDanh sach rong\n";
return 0;
}
else
{
while(p!=NULL)
{
s=s+p->pt;
p=p->next;
}
}
return s;
}
//Tinh gia tri trung binh cac phan tu trong danh sach
float avg_list(list first)
{
list p=first;
float avg;
if(first==NULL)
{
cout << "\nDanh sach rong\n";
return 0;
}
return avg=(float)sum_list(p)/(float)count_list(p);
}
//Tra ve node nam o vi tri n
list position_node(list first,int n)
{
list p=first;
int c=1;
while(c<n)
{
p=p->next;
c++;
}
return p;
}
//Chen vao dau danh sach
void insert_first(list &first, int data)
{
list p;
p=new node;
p->pt=data;
p->next=first;
first=p;
}
//Chen cuoi danh sach
void insert_last(int data)
{
list p;
p=new node;
p->pt=data;
last->next=p;
last=p;
p->next=NULL;
}
//Ham chen node vao danh sach
void insert_node(list &first)
{
int n,x,c;
list p=first;
if(p==NULL)
cout << "\nDanh sach rong";
else
{
cout << "\nNhap vi tri can chen: ";
cin >> n;
c=count_list(p);
if(n<1 || n>(c+1))
cout << "\nVi tri khong hop le";
else
{
cout << "\nNhap gia tri cho phan tu: ";
cin >> x;
if(n==1)
insert_first(first,x);
else
{
c=count_list(p);
if(n==c+1)
insert_last(x);
else
{
list q;
q=new node;
q->pt=x;
q->next=position_node(p,n-1)->next;
position_node(p,n-1)->next=q;
}
}
}
}
}
//Xoa node dau danh sach
void del_first(list &first)
{
list p;
p=first;
first=p->next;
}
//Xoa node cuoi danh sach
void del_last(list &first)
{
list p=first;
int c=1;
int n=count_list(p);
while(c<n-1)
{
p=p->next;
c++;
}
delete(last);
last=p;
p->next=NULL;
}
//Xoa 1 node bat ki trong danh sach
void del_node(list &first)
{
list p=first;
int n,c;
if(first==NULL)
cout << "\nDanh sach rong";
else
{
cout << "\nNhap vi tri can xoa: ";
cin >> n;
c=count_list(p);
if(n<1 || n>c+1)
cout << "\nVi tri khong hop le";
else
{
if(n==1)
del_first(first);
else
{
c=count_list(p);
if(n==c)
del_last(first);
else
{
list q,t;
q=position_node(p,(n-1));
t=position_node(p,n);
q->next=t->next;
delete(t);
}
}
}
}
}
//Dao nguoc danh sach
void reverse_list(list &first)
{
if(first==NULL)
return;
list current,previous;
current=NULL;
previous=NULL;
while(first)
{
current=first;
first=first->next;
current->next=previous;
previous=current;
}
first=current;
}
//Tim min
list min_list(list first)
{
list p=first,min=p;
while(p)
{
if(p->pt<min->pt)
min=p;
else
p=p->next;
}
return min;
}
//Sap xep tang dan
void sort_list(list &first)
{
list p=first,q;
int tmp;
while(p->next)
{
q=min_list(p);
tmp=p->pt;
p->pt=q->pt;
q->pt=tmp;
p=p->next;
}
}
//Tao danh sach moi
void create_list(list &first)
{
int n;
list p;
cout << "\nNhap gia tri: ";
cin >> n;flushall();
while(n!=0)
{
p=new node;
p->pt=n;
if(first==NULL)
first=p;
else
last->next=p;
last=p;
p->next=NULL;
cout << "\nNhap gia tri: ";
cin >> n;flushall();
}
}
//Menu chuong trinh
int menu()
{
int n;
do
{
cout << "\n1. Tao danh sach";
cout << "\n2. In danh sach";
cout << "\n3. Xoa phan tu";
cout << "\n4. Chen phan tu vao danh sach";
cout << "\n5. Dao nguoi danh sach";
cout << "\n6. Tinh tong gia tri cac phan tu trong danh sach";
cout << "\n7. Tinh gia tri trung binh gia tri cac phan tu trong danh sach";
cout << "\n8. Dem so phan tu trong danh sach";
cout << "\n9. Nhap tiep vao danh sach";
cout << "\n10. In ra phan tu co gia tri nho nhat trong danh sach";
cout << "\n11. Sap xep danh sach tang dan";
cout << "\n12. Xoa toan bo danh sach";
cout << "\n\n0. Thoat chuong trinh";
cout << "\n\n\tMoi ban chon tinh nang: ";
cin >> n;
}
while(n<0 || n>12);
return n;
}
//Chuong trinh chinh
void main()
{
int chucnang;
do
{
chucnang=menu();
flushall();
switch(chucnang)
{
case 0:
{break;}
case 1:
{system("cls");clear_list(first);create_list(first);system("cls");break;}
case 2:
{system("cls");print_list(first);getch();break;}
case 3:
{system("cls");del_node(first);getch();break;}
case 4:
{system("cls");insert_node(first);getch();break;}
case 5:
{system("cls");reverse_list(first);getch();break;}
case 6:
{system("cls");cout << "\nTong gia tri cac phan tu trong danh sach: "<<sum_list(first);getch();break;}
case 7:
{system("cls");cout << "\nGia tri trung binh cac phan tu trong danh sach: "<<avg_list(first);getch();break;}
case 8:
{system("cls");cout << "\nSo phan tu trong danh sach: "<<count_list(first);getch();break;}
case 9:
{system("cls");create_list(first);getch();break;}
case 10:
{system("cls");cout << "\nGia tri nho nhat trong danh sach: " << min_list(first)->pt;getch();break;}
case 11:
{system("cls");sort_list(first);getch();break;}
case 12:
{system("cls");clear_list(first);getch();break;}
}
}
while(chucnang!=0);
}
chúc vui!--------------------------------------------------
Xem các chủ đề cùng chuyên mục:
- Bài Tập Hàm-Bài 62 SGK 21/05/2009
- Tính tổ hợp của N chập K 21/07/2009
- Chương trình quản lý viện 19/07/2009
- Tổng hợp các bài toán về đệ quy!!! 09/05/2009
- ".:'Các Bài Tập Của C Ôn Tập':." 20/06/2009
- Nhập một mảng, Trong khi nhập mảng được sắp xếp tăng dần 19/07/2009
- Đề Thi :Thuật Toán ngày 16.06.2011 10/06/2011
- Thuật toán tìm dãy con chung dài nhất.. 17/04/2011
- Tìm kiễm chuỗi trong chuỗi 04/03/2011
- Thuật toán nhân số nguyên lớn 04/03/2011
+3 EXP







Trả Lời Với Trích Dẫn
