QQQdslk_sv
#include <iostream>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
/*Cau truc thong tin chung ve sinh vien*/
typedef struct
{
int masv;
char hoten[30];
}sinhvien;
/*Cau truc cua mot node trong danh sach lien ket don*/
typedef struct node
{
sinhvien infor;
struct node *next;
}*nodeptr;
/*Cac thao tac tren danh sach lien ket don*/
/*Khoi dong danh sach lien ket don*/
void init(nodeptr *L)
{
*L=NULL;
}
/*============Cap phat mien nho cho mot node cua danh sach lien ket don===========*/
nodeptr getnode()
{
nodeptr p;
p=(nodeptr)malloc(sizeof(struct node));
return p;
}
/*==========Giai phong mien nho cho mot node cua danh sach lien ket don===========*/
void freenode(nodeptr p)
{
free(p);
}
/*==================Kiem tra tinh rong cua danh sach lien ket don===========*/
int empty(nodeptr *L)
{
if(*L==NULL) return 1;
return 0;
}
/*==================Them mot node vao dau danh sach lien ket don============*/
nodeptr add_top(nodeptr *L,sinhvien sv)
{
nodeptr p;
p=getnode();
p->infor=sv;
if(empty(L))
{
p->next=NULL;
*L=p;
return p;
}
p->next=*L;
*L=p;
return p;
}
/*===================Them mot node vao cuoi danh sach lien ket don================*/
nodeptr add_bottom(nodeptr *L,sinhvien sv)
{
nodeptr p,q;
q=getnode();
q->infor=sv;
if(empty(L))
{
q->next=NULL;
*L=q;
return q;
}
p=*L;
while(p->next!=NULL)
{
p=p->next;
}
p->next=q;
q->next=NULL;
return q;
}
/*===================Them node truoc node p trong danh sach lien ket don===============*/
nodeptr add_before(nodeptr *L,sinhvien sv,int n)
{
nodeptr p,q;
q=getnode();
q->infor=sv;
if(empty(L))
{
cout<<"
Vi tri khong hop le ";
//delay(2000);
return(NULL);
}
p=*L;int i=0;
while(p!=NULL&&i<n)
{
i++;
p=p->next;
}
if(p==NULL)
{
cout<<"
Vi tri khong hop le ";
//delay(1000);
return(NULL);
}
q->next=p->next;
p->next=q;
return q;
getch();
}
/*==================Loai bo node o dau danh sach lien ket don==================*/
void del_top(nodeptr *L)
{
nodeptr p,q;
if(empty(L))
{
cout<<"
Danh sach rong ";
//delay(2000);
return;
}
p=*L;
q=p;
p=p->next;
*L=p;
cout<<"
Node vua loai bo ";
cout<<"
Ho ten: "<<q->infor.hoten;
cout<<"
Ma sinh vien: "<<q->infor.masv;
//delay(1000);
freenode(q);
}
/*===================Loai bo node o cuoi danh sach lien ket don===============*/
void del_bottom(nodeptr *L)
{
nodeptr p,q;
if(empty(L))
{
cout<<"
Danh sach rong ";
//delay(2000);
return;
}
p=*L;
if(p->next==NULL)
{
del_top(L);
return;
}
while((p->next)->next!=NULL)
{
p=p->next;
}
q=p->next;
p->next=NULL;
cout<<"
Node vua loai bo ";
cout<<"
Ho ten: "<<q->infor.hoten;
cout<<"
Ma sinh vien: "<<q->infor.masv;
//delay(1000);
freenode(q);
}
/*===================Loai bo node truoc node p trong danh sach lien ket don==================*/
void del_before(nodeptr *L,int n)
{
nodeptr p,q;int i;
if(empty(L))
{
cout<<"
Danh sach rong ";
//delay(2000);
return;
}
p=*L;
if(p->next==NULL)
{
del_top(L);
return;
}
i=0;
while(p!=NULL&&i<n-1)
{
i++;
p=p->next;
}
if(p->next==NULL)
{
cout<<"
Vi tri khong hop le";
//delay(2000);
return;
}
q=p->next;
p->next=q->next;
cout<<"
Node vua loai bo ";
cout<<"
Ho ten: "<<q->infor.hoten;
cout<<"
Ma sinh vien: "<<q->infor.masv;
//delay(1000);
freenode(q);
}
/*====================Duyet danh sach lien ket don==============*/
void duyet(nodeptr *L)
{
nodeptr p;
if(empty(L))
{
cout<<"
Danh sach rong ";
//delay(2000);
return;
}
int i=1;
p=*L;
while(p!=NULL)
{
cout<<"
Sinh vien thu: "<<i++;
cout<<"
---";
cout<<"
Ho ten: "<<p->infor.hoten;
cout<<"
Ma sinh vien: "<<p->infor.masv;
p=p->next;
cout<<"
------------------------" ;
}
}
/*====================Sap xep danh sach theo mot khoa=================*/
void sapxepnode(nodeptr *L)
{
nodeptr p,q;
sinhvien temp;
for(p=*L;p!=NULL;p=p->next)
{
for(q=p->next;q!=NULL;q=q->next)
{
if(p->infor.masv>q->infor.masv)
{
temp=p->infor;
p->infor=q->infor;
q->infor=temp;
}
}
}
cout<<"
Danh sach sau khi duoc sap xep: ";
for(p=*L;p!=NULL;p=p->next)
{
cout<<"
Ho ten: "<<p->infor.hoten;
cout<<"
Ma sinh vien: "<<p->infor.masv;
}
}
/*=======================Tim kiem danh sach================*/
void searchnode(nodeptr *L,int masv)
{
nodeptr p;
p=*L;
while(p!=NULL&&p->infor.masv!=masv)
p=p->next;
if(p==NULL)
{
cout<<"
Sinh vien khong ton tai ";
}
else
{
cout<<"
Sinh vien can tim ";
cout<<"
Ho ten: "<<p->infor.hoten;
cout<<"
Ma sinh vien: "<<p->infor.masv;
}
}
/*===================Ham thao tac===================*/
int main()
{
//clrscr();
nodeptr L;
sinhvien sv1;
int vitri,masv;
int chon;
init(&L);
do
{
// clrscr();
cout<<"
\t THAO TAC VOI DANH SACH LIEN KET DON ";
cout<<"
\t------------------------------------";
cout<<"
\t 1.Them node vao dau danh sach ";
cout<<"
\t 2.Them node vao cuoi danh sach ";
cout<<"
\t 3.Them node vao giua danh sach ";
cout<<"
\t 4.Loai bo node o dau danh sach ";
cout<<"
\t 5.Loai bo node o cuoi danh sach ";
cout<<"
\t 6.Loai bo node o giua danh sach ";
cout<<"
\t 7.Duyet danh sach ";
cout<<"
\t 8.Sap xep danh sach ";
cout<<"
\t 9.Tim kiem danh sach ";
cout<<"
\t 0.Thoat ";
cout<<"
\t #chon (1->9 or 0 de thoat): ";
cin>>chon;cin.ignore();
switch(chon)
{
case 1:
cout<<"
Ho ten sinh vien: ";
gets(sv1.hoten);
cout<<"
Ma sinh vien: ";
cin>>sv1.masv;
add_top(&L,sv1);
break;
case 2:
cout<<"
Ho ten sinh vien: ";
gets(sv1.hoten);
cout<<"
Ma sinh vien: ";
cin>>sv1.masv;
add_bottom(&L,sv1);
break;
case 3:
cout<<"
Vi tri them: ";
cin>>vitri;
cout<<"
Ho ten sinh vien: ";
gets(sv1.hoten);
cout<<"
Ma sinh vien: ";
cin>>sv1.masv;
add_before(&L,sv1,vitri-1);
break;
case 4:
del_top(&L);
break;
case 5:
del_bottom(&L);
break;
case 6:
cout<<"
Vi tri loai bo: ";
cin>>vitri;
del_before(&L,vitri-1);
break;
case 7:
duyet(&L);
break;
case 8:
sapxepnode(&L);
break;
case 9:
cout<<"
Ma sinh vien can tim: ";
cin>>masv;
searchnode(&L,masv);
break;
}
getch();
}
while(chon!=0);
}
Bạn đang đọc truyện trên: Truyen2U.Pro