ĐAp Án C++

Màu nền
Font chữ
Font size
Chiều cao dòng

///////////////////////////1.cpp////////////////

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

struct sinhvien{

int masinhvien;

char hoten[25];

};

struct node{

sinhvien info;

node *next;

};

struct list{

node *pfirst,*plast;

};

void nhap(sinhvien &sv){

printf("

Ma sinh vien: ");fflush(stdin);scanf("%d",&sv.masinhvien);

printf("

Ho va ten: ");fflush(stdin);gets(sv.hoten);

}

void xuat(sinhvien &sv,int stt){

printf("

| %d |%8d |%14s |",stt,sv.masinhvien,sv.hoten);

printf("

-----------------------------------------------");

}

//---------------------------Ket thuc phan khai bao---------------------------

void make(list &d){

d.pfirst=d.plast=NULL;

}

int empty(list &d){

if(d.pfirst==NULL) return 1;

else return 0;

}

void themcuoi(list &d,sinhvien &sv){

node *p=new node;

p->info=sv;

p->next=NULL;

if(empty(d)){

d.pfirst=d.plast=p;

return;

}

else{

d.plast->next=p;

d.plast=p;

return;

}

}

void duyet(list &d){

node *p;

p=d.pfirst;

int stt=0;

printf("

-----------------------------------------------");

printf("

| STT | Ma sinh vien | Ho va ten |");

printf("

-----------------------------------------------");

while(p!=NULL){

stt++;

xuat(p->info,stt);

p=p->next;

}

}

void themk(list &d,int &k){

node *p=new node;

node *q=new node;

p=d.pfirst;

sinhvien sv;

int found=0,count=1,dem=0;

while(p!=NULL){

p=p->next;

dem++;

}

if(k==0){

nhap(sv);

q->info=sv;

q->next=d.pfirst;

d.pfirst=q;

duyet(d);

}

else if(k>=(dem+1)){

printf("

Khong the them.

");

}

else{

nhap(sv);

p=d.pfirst;

while(p!=NULL && found==0){

if(count==k){

q->next=p->next;

q->info=sv;

p->next=q;

found=1;

duyet(d);

}

if(p->next==NULL){

themcuoi(d,sv);

}

p=p->next;

count++;

}

}

}

void main(){

sinhvien sv;

list d;

int chon,k;

do{

printf("

1. Khoi tao");

printf("

2. Them cuoi");

printf("

3. Xem danh sach");

printf("

4. Them 1 phan tu sau vi tri k");

printf("

5. Thoat");

printf("

Moi nhap chuong trinh can chon: ");

scanf("%d",&chon);

switch(chon){

case 1:make(d);printf("

Danh sach da duoc khoi tao.

");break;

case 2:nhap(sv);themcuoi(d,sv);duyet(d);break;

case 3:duyet(d);break;

case 4:printf("

Moi nhap vi tri can them: ");fflush(stdin);scanf("%d",&k);

themk(d,k);break;

};

}while(chon!=5) ;

getch();

}

//////////////////////////////4.cpp//////////////////////

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

struct sinhvien{

int masinhvien;

char hoten[25];

};

struct node{

sinhvien info;

node *next;

};

struct list{

node *pfirst,*plast;

};

void nhap(sinhvien &sv){

printf("

Ma sinh vien: ");fflush(stdin);scanf("%d",&sv.masinhvien);

printf("

Ho va ten: ");fflush(stdin);gets(sv.hoten);

}

void xuat(sinhvien &sv,int stt){

printf("

| %d |%8d |%14s |",stt,sv.masinhvien,sv.hoten);

printf("

-----------------------------------------------");

}

//---------------------------Ket thuc phan khai bao----------------------------

void make(list &d){

d.pfirst=d.plast=NULL;

}

int empty(list &d){

if(d.pfirst==NULL) return 1;

else return 0;

}

void duyet(list &d){

node *p;

p=d.pfirst;

int stt=0;

printf("

-----------------------------------------------");

printf("

| STT | Ma sinh vien | Ho va ten |");

printf("

-----------------------------------------------");

while(p!=NULL){

stt++;

xuat(p->info,stt);

p=p->next;

}

}

void themdau(list &d,sinhvien &sv){

node *p=new node;

p->info=sv;

if(empty(d)){

d.pfirst=d.plast=p;

p->next=NULL;

}

else{

p->next=d.pfirst;

d.pfirst=p;

}

}

void timkiem(list &d,int k){

node *p;

p=d.pfirst;

int found=0;

while(p!=NULL && found==0){

if(p->info.masinhvien==k){

printf("

-----------------------------------------------");

printf("

| STT | Ma sinh vien | Ho va ten |");

printf("

-----------------------------------------------");

xuat(p->info,1);

found=1;

}

p=p->next;

}

if(found==0) printf("

Khong tim thay sinh vien

");

}

void xoatruock(list &d,int &k){

node *p;

node *q;

p=d.pfirst;

int found=0,count=1;

if(empty(d)){

printf("

\t Danh sach rong.

");

return;

}

if(k==2){

d.pfirst=d.pfirst->next;

p->next=NULL;

free(p);

duyet(d);

return;

}

while(p!=NULL && found==0){

if(p->next==NULL){

printf("

Khong tim thay.

");

}

else if(count==(k-2)){

q=p->next;

if(q->next==NULL){

d.plast=p;

p->next=NULL;

}

else{

p->next=q->next;

q->next=NULL;

}

free(q);

found=1;

duyet(d);

}

p=p->next;

count++;

}

}

void main(){

sinhvien sv;

list d;

int chon,k;

clrscr;

do{

printf("

1. Khoi tao");

printf("

2. Them dau");

printf("

3. Tim kiem sinh vien theo ma sinh vien");

printf("

4. Xoa 1 phan tu truoc vi tri k");

printf("

5. Duyet danh sach.");

printf("

6. Thoat");

printf("

Moi nhap chuong trinh can chon: ");

scanf("%d",&chon);

switch(chon){

case 1:make(d);printf("

Danh sach da duoc khoi tao.

");break;

case 2:nhap(sv);themdau(d,sv);duyet(d);break;

case 3:printf("

Moi ma sinh vien can : ");fflush(stdin);scanf("%d",&k);

timkiem(d,k);break;

case 4:printf("

Moi nhap vi tri can xoa: ");fflush(stdin);scanf("%d",&k);

xoatruock(d,k);break;

case 5:duyet(d);break;

}

}while(chon!=6) ;

getch();

}

////////////////////////////5.cpp/////////////////////////////

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#define true 1;

#define false 0

struct node{

int info;

node *next;

};

struct stack{

node *phead;

};

//-------------------------------------Ket thuc phan khai bao------------------------------

int ktrong(stack &s){

if(s.phead==NULL) return 1;

else return 0;

}

void khoitao(stack &s){

s.phead=NULL;

}

void clear(stack &s){

node *p,*q;

p=s.phead;

while(p!=NULL){

q=p;

p=p->next;

free(q);

}

s.phead=NULL;

}

void push(stack &s,int &k){

node *p=new node;

p->info=k;

if(ktrong(s)){

s.phead=p;

}

else{

p->next=s.phead;

s.phead=p;

}

}

void pop(stack &s){

node *p;

int x;

if(ktrong(s)){

printf("Stack rong");

return;

}

else{

p=s.phead;

s.phead=s.phead->next;

x=p->info;

p->next=NULL;

free(p);

printf("%d",x);

}

}

void nhiphan(int n){

stack s;

khoitao(s);

int du,m=n,t;

while(m>0){

du=m%2; //chia 2 lay du

push(s,du); //day phan du vao trong stack

m=m/2; //chia lien tiep cho 2

}

printf("

So %d chuyen sang nhi phan la: ",n);

while(!ktrong(s)){

pop(s);

}

clear(s);

printf("

");

}

void main(){

int n,chon,t;

stack s;

do{

printf("

1. Khoi tao stack.");

printf("

2. Dua mot phan tu vao trong stack.");

printf("

3. Lay mot phan tu ra khoi stack.");

printf("

4. Chuyen doi mot so sang dang nhi phan.");

printf("

5. Thoat");

printf("

Moi chon chuong trinh can thuc hien: ");

scanf("%d",&chon);

switch(chon){

case 1: khoitao(s);printf("

Stack da duoc khoi tao.

");break;

case 2: printf("

Moi nhap phan tu can dua vao: ");scanf("%d",&n);

push(s,n);break;

case 3: printf("

Phan tu lay ra la: ");pop(s);printf("

");break;

case 4: printf("

Moi nhap so can chuyen: ");scanf("%d",&t);

nhiphan(t);break;

}

}while(chon != 5);

getch();

}

///////////////////////////////////////////6.cpp///////////////////////////////////

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#include<math.h>

#define true 1

#define false 0

struct node{

int info;

node *next;

};

struct queue{

node *pfirst,*plast;

};

//----------------------------------Ket thuc phan khai bao-------------------------------

void khoitao(queue &q){

q.pfirst=q.plast=NULL;

}

int ktrong(queue &q){

if(q.pfirst==NULL) return 1;

return 0;

}

void clear(queue &q){

node *p,*p1;

p=q.pfirst;

while(p!=NULL){

p1=p;

p=p->next;

free(p1);

}

}

void put(queue &q,int x){

node *p=new node;

p->info=x;

if(ktrong(q)){

q.pfirst=q.plast=p;

}

else{

q.plast->next=p;

p->next=NULL;

q.plast=p;

}

}

void get(queue &q){

node *p=new node;

if(ktrong(q)){

printf("Queue rong.");

}

else{

p=q.pfirst;

int x=p->info;

q.pfirst=p->next;

p->next=NULL;

free(p);

printf("%d",x);

}

}

/*Chuyen 1 so co phan thap phan sang nhi phan ta se~ nha^n lien tiep so do' voi 2 cho toi khi nao het phan

thap phan thi dung lai. Trong qua' trinh' nhan neu co phan nguyen >0 thi ta tru' di phan nguyen, chi lay phan

thap phan roi tiep tuc nhan. Dua phan nguyen vao trong queue

vd: 0.125 x 2 = 0.25 dua phan nguyen 0 vao trong queue, lay phan than phan 0.25 - 0 = 0.25, tiep tuc nhan voi 2

thuc hien lien tuc nhu the.

*/

void nhiphan(float x){

queue q;

khoitao(q);

float v=x;

int k=0,h,t;

while(fabs(v)>0.00001){

v=v*2; //nhan lien tiep voi 2

h=int(v); //lay phan nguyen cua so^' do', gan' = h

put(q,h); //day phan nguyen vao queue

v=v-int(v); //loai bo phan nguyen lay phan thap phan, tiep tuc vong lap

}

printf("

%f chuyen sang nhi phan la : 0.",x);

while(!ktrong(q)){

get(q);

}

clear(q);

printf("

");

}

void main(){

int n,chon;

float x;

queue q;

do{

printf("

1. Khoi tao queue.");

printf("

2. Dua mot phan tu vao trong queue.");

printf("

3. Lay mot phan tu ra khoi queue.");

printf("

4. Chuyen doi mot so (n<1) sang dang nhi phan.");

printf("

5. Thoat");

printf("

Moi chon chuong trinh can thuc hien: ");

scanf("%d",&chon);

switch(chon){

case 1: khoitao(q);printf("

Queue da duoc khoi tao.

");break;

case 2: printf("

Moi nhap phan tu can dua vao: ");scanf("%d",&n);

put(q,n);break;

case 3: printf("

Phan tu lay ra la: ");get(q);printf("

");break;

case 4: printf("

Moi nhap so can chuyen: ");fflush(stdin);scanf("%f",&x);

nhiphan(x);break;

}

}while(chon != 5);

getch();

}

///////////////////////7.cpp////////////////////////////////

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#define true 1

#define false 0

#define MAX 20

template <class T>

void swap(T& x,T& y){

T tmp=x;x=y;y=tmp;

};

struct sinhvien{

int masinhvien;

char hoten[25];

};

//---------------------------------Ket thuc khai bao------------------------------

void nhap(sinhvien a[],int &n){

printf("

Moi nhap so luong sinh vien: ");fflush(stdin);scanf("%d",&n);

for(int i=0;i<n;i++){

printf("

Sinh vien thu %d",i+1);

printf("

\tMa sinh vien: ");fflush(stdin);scanf("%d",&a[i].masinhvien);

printf("

\tHo va ten: ");fflush(stdin);gets(a[i].hoten);

}

}

void xuat(sinhvien a[],int &n){

int stt=1;

printf("

-----------------------------------------------");

printf("

| STT | Ma sinh vien | Ho va ten |");

printf("

-----------------------------------------------");

for(int i=0;i<n;i++){

printf("

| %d |%8d |%14s |",stt,a[i].masinhvien,a[i].hoten);

printf("

-----------------------------------------------");

stt++;

}

}

void sx_chon(sinhvien a[],int n){

int k;

for(int i=0;i<n-1;i++){

k=i;

for(int j=i+1;j<n;j++){

if(a[j].masinhvien < a[k].masinhvien) k=j;

}

swap(a[i],a[k]);

}

xuat(a,n);

}

void sv_heap(sinhvien a[],int n) {

int i, s, f;

sinhvien x;

for (i = 1; i <= n; i++) {

x = a[i];

s = i;

while (s > 0 && x.masinhvien > a[(s-1)/2].masinhvien) {

a[s] = a[(s-1)/2];

s = (s-1)/2;

}

a[s] = x;

}

for (i = n; i > 0; i--) {

x = a[i]; a[i] = a[0];

f = 0;

s = 2 * f + 1;

if(s + 1 < i && a[s].masinhvien < a[s + 1].masinhvien) s = s + 1;

while (s < i && x.masinhvien < a[s].masinhvien) {

a[f] = a[s];

f = s;

s = 2 * f + 1;

if (s + 1 < i && a[s].masinhvien < a[s + 1].masinhvien) s = s + 1;

}

a[f] = x;

}

xuat(a,n);

}

void main(){

sinhvien a[MAX];

int n,chon;

do{

printf("

1. Nhap danh sach");

printf("

2. Xem danh sach ");

printf("

3. Sap xep tang dan bang SELECTION Sort");

printf("

4. Sap xep tang dan bang HEAP Sort");

printf("

5. Thoat");

printf("

Moi nhap chuong trinh can chon: ");

scanf("%d",&chon);

switch(chon){

case 1:nhap(a,n);break;

case 2:xuat(a,n);break;

case 3:sx_chon(a,n);break;

case 4:sv_heap(a,n);break;

}

}while(chon!=5);

}

///////////////////////////////8.cpp//////////////////////////

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#define MAX 20

template <class T>

void swap(T& x,T& y){

T tmp=x;x=y;y=tmp;

};

struct sinhvien{

int masinhvien;

char hoten[25];

};

//---------------------------------Ket thuc khai bao------------------------------

void nhap(sinhvien a[],int &n){

printf("

Moi nhap so luong sinh vien: ");scanf("%d",&n);

for(int i=1;i<=n;i++){

printf("

Sinh vien thu %d",i);

printf("

\tMa sinh vien: ");scanf("%d",&a[i].masinhvien);

printf("

\tHo va ten: ");fflush(stdin);gets(a[i].hoten);

}

}

void xuat(sinhvien a[],int &n){

int stt=1;

printf("

-----------------------------------------------");

printf("

| STT | Ma sinh vien | Ho va ten |");

printf("

-----------------------------------------------");

for(int i=1;i<=n;i++){

printf("

| %d |%8d |%14s |",stt,a[i].masinhvien,a[i].hoten);

printf("

-----------------------------------------------");

stt++;

}

}

void bubblesort(sinhvien a[],int &n) {

int i,doicho;

do {

doicho=0;

for (i=1;i<=n;i++)

if (a[i].masinhvien > a[i+1].masinhvien) {

swap(a[i],a[i+1]);

doicho = 1;

}

} while (doicho==1);

}

void mergesort(sinhvien a[], int &n) {

int i, j, k, low1, up1, low2, up2;

int size;

sinhvien *Listtmp = new sinhvien[n + 1];

size = 1;

while (size < n) {

low1 = 1; k = 1;

while (low1 + size <= n) {

low2 = low1 + size;

up1 = low2 - 1;

up2 = (low2 + size - 1 <= n) ? low2 + size - 1 : n;

for (i = low1, j = low2; i <= up1 && j <= up2; k++)

if(a[i].masinhvien <= a[j].masinhvien) Listtmp[k] = a[i++];

else Listtmp[k] = a[j++];

for(; i <= up1; k++) Listtmp[k] = a[i++];

for(; j <= up2; k++) Listtmp[k] = a[j++];

low1 = up2 + 1;

}

for(i = low1; k <= n; i++) Listtmp[k++] = a[i];

for(i = 1; i <= n; i++) a[i] = Listtmp[i];

size *= 2;

}

}

void main(){

sinhvien a[MAX];

int n,chon;

do{

printf("

1. Nhap danh sach");

printf("

2. Xem danh sach ");

printf("

3. Sap xep tang dan bang BUBLE Sort");

printf("

4. Sap xep tang dan bang MERGE Sort");

printf("

5. Thoat");

printf("

Moi nhap chuong trinh can chon: ");

scanf("%d",&chon);

switch(chon){

case 1:nhap(a,n);break;

case 2:xuat(a,n);break;

case 3:bubblesort(a,n);xuat(a,n);break;

case 4:mergesort(a,n);xuat(a,n);break;

}

}while(chon!=5);

}

///////////////////////////9.cpp///////////////////////////

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#define true 1

#define false 0

#define MAX 20

template <class T>

void swap(T& x,T& y){T

tmp=x;x=y;y=tmp;

};

struct sinhvien{

int masinhvien;

char hoten[25];

};

//---------------------------------Ket thuc khai bao------------------------------

void nhap(sinhvien a[],int &n){

printf("

Moi nhap so luong sinh vien: ");fflush(stdin);scanf("%d",&n);

for(int i=0;i<n;i++){

printf("

Sinh vien thu %d",i+1);

printf("

\tMa sinh vien: ");fflush(stdin);scanf("%d",&a[i].masinhvien);

printf("

\tHo va ten: ");fflush(stdin);gets(a[i].hoten);

}

}

void xuat(sinhvien a[],int &n){ //xuat du lieu ve 1 sinh vien

int stt=1;

printf("

-----------------------------------------------");

printf("

| STT | Ma sinh vien | Ho va ten |");

printf("

-----------------------------------------------");

for(int i=0;i<n;i++){

printf("

| %d |%8d |%14s |",stt,a[i].masinhvien,a[i].hoten);

printf("

-----------------------------------------------");

stt++;

}

}

void sx_chen(sinhvien a[],int n){

for(int i=1;i<n;i++){

sinhvien temp=a[i];

int j=i-1;

while(a[j].masinhvien > temp.masinhvien && j>=0 ){

a[j+1]=a[j];

j--;

}

a[j+1]=temp;

}

xuat(a,n);

}

void partition(sinhvien a[],int low,int up,int &privot){

sinhvien privital=a[low];

int i=low;

int j=up;

while(i<j){

while(a[i].masinhvien <= privital.masinhvien && i<up) i++;

while(a[j].masinhvien > privital.masinhvien) j--;

if(i<j) swap(a[i],a[j]);

}

swap(a[low],a[j]);privot=j;

}

void sx_nhanh(sinhvien a[],int low,int up){

int privot;

if(low>up) return;

partition(a,low,up,privot);

sx_nhanh(a,low,privot-1);

sx_nhanh(a,privot+1,up);

}

void main(){

sinhvien a[MAX];

int n,chon;

do{

printf("

1. Nhap danh sach");

printf("

2. Xem danh sach ");

printf("

3. Sap xep tang dan bang INSERT Sort");

printf("

4. Sap xep tang dan bang QUICK Sort");

printf("

5. Thoat");

printf("

Moi nhap chuong trinh can chon: ");

scanf("%d",&chon);

switch(chon){

case 1:nhap(a,n);break;

case 2:xuat(a,n);break;

case 3:sx_chen(a,n);break;

case 4:sx_nhanh(a,0,n-1);xuat(a,n);break;

}

}while(chon!=5);

}

////////////////////////////////////////11.cpp/////////////////////////////

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#define true 1

#define false 0

struct sinhvien{

char hoten[30];

int masinhvien;

};

struct node{

sinhvien info;

node *left,*right;

};

void nhap(sinhvien &sv){

printf("

Ten sinh vien: ");fflush(stdin);gets(sv.hoten);

printf("

Ma sinh vien: ");fflush(stdin);scanf("%d",&sv.masinhvien);

}

void in(){

printf("

\t\t --------------------------");

printf("

\t\t| Ho va ten | MSV | ");

printf("

\t\t --------------------------");

}

void xuat(sinhvien &sv){

printf("

\t\t|%9s |%6d |",sv.hoten,sv.masinhvien);

printf("

\t\t --------------------------");

}

//-------------------------------------------Ket thuc khai bao--------------------------------------------

void khoitao(node *&proot){

proot=NULL;

}

int ktrong(node *proot){

if(proot==NULL) return 1;

return 0;

}

node *makenode(sinhvien &sv){

node *p=new node;

p->info=sv;

p->left=NULL;

p->right=NULL;

return p;

}

node *timkiem(node *proot,int ma){

node *p=new node;

if(ktrong(proot)) return NULL;

if(proot->info.masinhvien==ma) return proot;

if(proot->info.masinhvien > ma) p=timkiem(proot->left,ma);

else p=timkiem(proot->right,ma);

return p;

}

void them(node *&proot,sinhvien &sv){

if(ktrong(proot)){

proot=makenode(sv);

return;

}

if(timkiem(proot,sv.masinhvien)){

printf("

Nut da ton tai ko the them.");

return;

}

if(proot->info.masinhvien > sv.masinhvien) them(proot->left,sv);

else them(proot->right,sv);

}

void duyetgiua(node *proot){

if(!ktrong(proot)){

duyetgiua(proot->left);

xuat(proot->info);

duyetgiua(proot->right);

}

}

node *timkiem2(node *proot,node *&fp,int &ma){

node *p=proot;

fp=NULL;

while(p!=NULL){

if(p->info.masinhvien==ma) return p;

if(proot->info.masinhvien > ma){

fp=p;

p=p->left;

}

else{

fp=p;

p=p->right;

}

}

return NULL;

}

void xoa(node *proot,int &ma){

node *fp,*p,*f,*rp,*q;

p=timkiem2(proot,fp,ma);

if(p==NULL){

printf("

Khong tim thay");

return;

}

if(p->left==NULL && p->right==NULL){

if(p==proot){free(proot);proot=NULL;return;}

if(fp->left==p){ fp->left=NULL;free(p);return;}

if(fp->right==p){fp->right=NULL;free(p);return;}

}

if(p->left!=NULL && p->right==NULL){

if(fp->left==p){fp->left=p->left;free(p);return;}

if(fp->right==p){fp->right=p->left;free(p);return;}

}

if(p->left==NULL && p->right!=NULL){

if(fp->left==p){fp->left=p->right;free(p);return;}

if(fp->right==p){fp->right=p->right;free(p);return;}

}

f=p;

rp=p->left;

while(rp->right!=NULL) {f=rp;rp=rp->right;}

f->right=rp->left;

p->info=rp->info;

free(rp);

rp==NULL;

}

void main(){

node *proot,*p;

int chon,ma;

sinhvien sv;

do{

printf("

1.Khoi tao.");

printf("

2.Them nut.");

printf("

3.Duyet giua");

printf("

4.Xoa nut.");

printf("

5.Thoat.");

printf("

Moi nhap chuong trinh can chon: ");

scanf("%d",&chon);

switch(chon){

case 1:khoitao(proot);printf("

Khoi tao thanh cong.

");break;

case 2:nhap(sv);them(proot,sv);break;

case 3:printf("

Nut goc la:");in();xuat(proot->info);

printf("

Cac phan tu cua cay nhi phan:

");in();duyetgiua(proot);break;

case 4:printf("

Moi nhap ma can bo: ");scanf("%d",&ma);xoa(proot,ma);in();duyetgiua(proot);break;

}

}while(chon!=5);

getch();

}

//////////////////////////////////////////12.cpp/////////////////////////////

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#define true 1

#define false 0

struct sinhvien{

char hoten[30];

int masinhvien;

};

struct node{

sinhvien info;

node *left,*right;

};

void nhap(sinhvien &sv){

printf("

Ten sinh vien: ");fflush(stdin);gets(sv.hoten);

printf("

Ma sinh vien: ");fflush(stdin);scanf("%d",&sv.masinhvien);

}

void in(){

printf("

\t\t --------------------------");

printf("

\t\t| Ho va ten | MSV | ");

printf("

\t\t --------------------------");

}

void xuat(sinhvien &sv){

printf("

\t\t|%9s |%6d |",sv.hoten,sv.masinhvien);

printf("

\t\t --------------------------");

}

//-------------------------------------------Ket thuc khai bao--------------------------------------------

void khoitao(node *&proot){

proot=NULL;

}

int ktrong(node *proot){

if(proot==NULL) return 1;

return 0;

}

node *makenode(sinhvien &sv){

node *p=new node;

p->info=sv;

p->left=NULL;

p->right=NULL;

return p;

}

node *timkiem(node *proot,int ma){

node *p=new node;

if(ktrong(proot)) return NULL;

if(proot->info.masinhvien==ma) return proot;

if(proot->info.masinhvien > ma) p=timkiem(proot->left,ma);

else p=timkiem(proot->right,ma);

return p;

}

void them(node *&proot,sinhvien &sv){

if(ktrong(proot)){

proot=makenode(sv);

return;

}

if(timkiem(proot,sv.masinhvien)){

printf("

Nut da ton tai ko the them.");

return;

}

if(proot->info.masinhvien > sv.masinhvien) them(proot->left,sv);

else them(proot->right,sv);

}

void duyetgiua(node *proot){

if(!ktrong(proot)){

duyetgiua(proot->left);

xuat(proot->info);

duyetgiua(proot->right);

}

}

node *timkiem2(node *proot,node *&fp,int &ma){

node *p=proot;

fp=NULL;

while(p!=NULL){

if(p->info.masinhvien==ma) return p;

if(proot->info.masinhvien > ma){

fp=p;

p=p->left;

}

else{

fp=p;

p=p->right;

}

}

return NULL;

}

void xoa(node *proot,int &ma){

node *fp,*p,*f,*rp,*q;

p=timkiem2(proot,fp,ma);

if(p==NULL){

printf("

Khong tim thay");

return;

}

if(p->left==NULL && p->right==NULL){

if(p==proot){free(proot);proot=NULL;return;}

if(fp->left==p){ fp->left=NULL;free(p);return;}

if(fp->right==p){fp->right=NULL;free(p);return;}

}

if(p->left!=NULL && p->right==NULL){

if(fp->left==p){fp->left=p->left;free(p);return;}

if(fp->right==p){fp->right=p->left;free(p);return;}

}

if(p->left==NULL && p->right!=NULL){

if(fp->left==p){fp->left=p->right;free(p);return;}

if(fp->right==p){fp->right=p->right;free(p);return;}

}

f=p;

rp=p->left;

while(rp->right!=NULL) {f=rp;rp=rp->right;}

f->right=rp->left;

p->info=rp->info;

free(rp);

rp==NULL;

}

void main(){

node *proot,*p;

int chon,ma;

sinhvien sv;

do{

printf("

1.Khoi tao.");

printf("

2.Them nut.");

printf("

3.Tim kiem theo ma sinh vien");

printf("

4.Xoa nut.");

printf("

5.Thoat.");

printf("

Moi nhap chuong trinh can chon: ");

scanf("%d",&chon);

switch(chon){

case 1:khoitao(proot);printf("

Khoi tao thanh cong.

");break;

case 2:nhap(sv);them(proot,sv);break;

case 3:printf("

Moi nhap ma sinh vien: ");scanf("%d",&ma);p=timkiem(proot,ma);

if(p==NULL) printf("

Khong tim thay.

");

else {in();xuat(p->info);}break;

case 4:printf("

Moi nhap ma sinh vien: ");scanf("%d",&ma);xoa(proot,ma);

in();duyetgiua(proot);break;

}

}while(chon!=5);

getch();

}

///////////////////////////////////CNPTK.CPP/////////////////////

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#define true 1

#define false 0

struct canbo{

char ten[30];

int macb;

};

struct node{

canbo info;

node *left,*right;

};

void nhap(canbo &cb){

printf("

Ten can bo: ");fflush(stdin);gets(cb.ten);

printf("

Ma can bo : ");fflush(stdin);scanf("%d",&cb.macb);

}

void in(){

printf("

\t\t --------------------------");

printf("

\t\t| Ho va ten | MCB | ");

printf("

\t\t --------------------------");

}

void xuat(canbo &cb){

printf("

\t\t|%9s |%6d |",cb.ten,cb.macb);

printf("

\t\t --------------------------");

}

//-------------------------------------------Ket thuc khai bao--------------------------------------------

void khoitao(node *&proot){ //truyen vao *&proot thay vi *proot nhu cac' ham' khac'

proot=NULL; //khoitao va them la 2 ham bat buoc^. phai truyen *&proot thay vi *proot nhu cac ham' khac'

}

void xoacay(node *proot){

if(proot==NULL){

printf("

Cay nhi phan rong. Khong co phan tu de xoa.");

return;

}

else{

xoacay(proot->left);

xoacay(proot->right);

free(proot);

}

}

int ktrong(node *proot){

if(proot==NULL) return 1;

return 0;

}

node *makenode(canbo &cb){

node *p=new node;

p->info=cb;

p->left=NULL;

p->right=NULL;

return p;

}

void duyettruoc(node *proot){

if(proot!=NULL){

xuat(proot->info);

duyettruoc(proot->left); //duyet truoc thi xuat o truoc

duyettruoc(proot->right);

}

}

void duyetgiua(node *proot){

if(proot!=NULL){

duyetgiua(proot->left);

xuat(proot->info); //duyet giua thi xuat o giua

duyetgiua(proot->right);

}

}

void duyetsau(node* proot){

if(proot!=NULL){

duyetsau(proot->left);

duyetsau(proot->right); //duyet sau thi xuat o sau

xuat(proot->info);

}

}

node *timkiem(node *proot,int &ma){

node *p=new node;

if(proot==NULL) return NULL;

if(proot->info.macb == ma) return proot;

if(proot->info.macb < ma ) p=timkiem(proot->left,ma);

else p=timkiem(proot->right,ma);

return p;

}

void them(node *&proot,canbo &cb){ //truyen vao *&proot thay vi *proot nhu cac' ham' khac'

if(proot==NULL){

proot=makenode(cb);

return;

}

if(timkiem(proot,cb.macb)){

printf("

Nut da ton tai. Khong the them.");//Khong the co 2 can bo cung' ma~.

return;

}

if(proot->info.macb > cb.macb) them(proot->left,cb);

else them(proot->right,cb);

}

node *timkiem2(node *proot,node *&fp,int &ma){ //timkiem2 khac timkiem o*? cho^~ tim' duoc nut' cha cua nut can^' tim'

node *p=proot;

fp=NULL; //fp la nut cha cua nut' p can^' tim

while(p!=NULL){

if(p->info.macb==ma) return p; // tim thay thi tra ve ngay p

if(proot->info.macb > ma){

fp=p;

p=p->left;

}

else{

fp=p;

p=p->right;

}

}

return NULL; //vong lap ket thuc' ma' ko tim thay thi dua ve NULL(do ham' nay' la ham' tra ve con tro? dang. node)

}

/* se co 3 truong hop xoa' nut' p:

1. Nut' xoa' la' nut' la:

2. Nut' xoa' co' 1 nut' con( ben^ trai' hoac be^n phai)

3. Nut' xoa' co' 2 nut' con

*/

void xoa(node *proot,int &ma){

node *fp,*p,*f,*rp,*q;

p=timkiem2(proot,fp,ma);

if(p==NULL){

printf("

Cay nhi phan rong. Khong tim thay");

return;

}

//nut' can^' xoa la 1 nut la'

if(p->left==NULL && p->right==NULL){

if(p==proot){free(proot);proot=NULL;return;}//nut' xoa chinh la nut' go^c', tuc la' cay np chi co' 1 pt la nut' goc^'

if(fp->left==p){ fp->left=NULL;free(p);return;} //p la nut' la' ben trai' cua nut fp

if(fp->right==p){fp->right=NULL;free(p);return;}//p la nut' la' ben phai? cua nut fp

}

//nut' xoa' co 1 nut' con

if(p->left!=NULL && p->right==NULL){//chi co 1 nut' con ben trai'

if(fp->left==p){fp->left=p->left;free(p);return;}

if(fp->right==p){fp->right=p->left;free(p);return;}

}

if(p->left==NULL && p->right!=NULL){//chi co 1 nut' con ben trai'

if(fp->left==p){fp->left=p->right;free(p);return;}

if(fp->right==p){fp->right=p->right;free(p);return;}

}

f=p;

rp=p->left;

while(rp->right!=NULL) {f=rp;rp=rp->right;}

f->right=rp->left;/*rp la phai nhat, do do khong co con phai

vi khong con rp nen nut cha phai chi den nut sau do*/

p->info=rp->info; //doi noi dung cua p va rp, roi xoa rp

free(rp);

rp==NULL;

}

void main(){

node *proot,*p;

int chon,ma;

canbo cb;

do{

printf("

1.Khoi tao.");

printf("

2.Them nut.");

printf("

3.Tim nut.");

printf("

4.Xoa nut.");

printf("

5.Duyet truoc");

printf("

6.Duyet giua");

printf("

7.Duyet sau");

printf("

8.Thoat.");

printf("

Moi nhap chuong trinh can chon: ");

scanf("%d",&chon);

switch(chon){

case 1:khoitao(proot);printf("

Cay nhi phan da duoc khoi tao.

");break;

case 2:nhap(cb);them(proot,cb);break;

case 3:printf("

Moi nhap ma can bo: ");scanf("%d",&ma);p=timkiem(proot,ma);

if(p!=NULL){ in();xuat(p->info);}

else printf("

Khong tim thay nut.

");

break;

case 4:printf("

Moi nhap ma can bo: ");scanf("%d",&ma);xoa(proot,ma);in();duyettruoc(proot);break;

case 5:in();duyettruoc(proot);break;

case 6:in();duyetgiua(proot);break;

case 7:in();duyetsau(proot);break;

}

}while(chon!=8);

getch();

}

Bạn đang đọc truyện trên: Truyen2U.Pro

#chikaki