Hoang_Nguyen
Youtube Master Race
em có đoạn chương trình sau:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define TRUE 0
#define FALSE -1
#define NULLKEY-1
#define M 100
//khai bao cau truc mot nut cua bang bam
struct node
{
int key; //khoa cua nut tren bang bam
};
//Khai bao bang bam co M nut
struct node hashtable[M];
int N;
/*bien toan cuc chi so nut hien co tren bang bam*/
//ham bam
int hashfunc(int key)
{
return(key %M);
}
//khoi dong bang bam
void initialize()
{
int i;
for(i=0;i<M;i++)
hashtable.key=NULLKEY;
N=0; //so nut hien co khoi dong bang 0
}
//tac vu empty:kiem tra ba bang bam co ranh khong
int empty()
{
return(N==0?TRUE:FALSE);
}
//tac vu full:kiem tra bang bam da day chua
int full()
{
return(N==M-1?TRUE:FALSE);
}
/*----------------------------------------------------------------------------------------------------------------------------------------
tac vu search:tim kiem nut co khoa k tren bang bam,neu khong tim thay ham nay tra ve vi tri M,neu tim thay ham nay tra ve dia chi tim thay
----------------------------------------------------------------------------------------------------------------------------------------*/
int search(int k)
{
int i;
i=hashfunc(k);
while(hashtable.key!=k&&hashtable.key
!=NULLKEY)
{
//bam lai(theo phuong phap do tim tuyen tinh):hi(key)=h(key)+i)%M)
i=i+1;
if(i>=M)
i=i-M;
}
if(hashtable.key==k) //tim thay
return(i);
else //khong tim thay
return(M);
}
//tac vu insert:them nut co khoa k vao bang bam
int insert(int k)
{
int i,j;
if(full())
{
printf("\nbang bam bi da,khong them nut co khoa %d duoc",k);
return(M);
}
i=hashfunc(k);
while(hashtable.key!=NULLKEY)
{
//bam lai (theo phuong phap do tuyen tinh)
i++;
if(i>=M)
i=i-M;
}
hashtable.key=k;
N=N-1;
return(i);
}
//tac vu remove
oa nut tai dia chi i tran bang bam
void remove(int i)
{
int j,r,cont,a;
cont=TRUE;
do
{
hashtable.key=NULLKEY;
j=i;
do
{
i=i+1;
if(i>=M)
i=i-M;
if(hashtable.key==NULLKEY)
cont=FALSE;
else
{
r=hashfunc(hashtable.key);
a=(j<r&&r<=i)||(r<=i&&i<j)||(i<j&&j<r);
}
}
while(cont&&a);
if(cont)
hashtable[j].key=hashtable.key;
}while(cont);
}
//tac vu viewtable
em chi tiet bang bam
void viewtable()
{
int i;
for(i=0;i<M;i++)
printf("\ntable[%2s]:%4d",i,hashtable.key);
}
//chuong trinh chinh
main()
{
int i,n,p,q;
int b,key,chucnang;
char c;
clrscr();
//khoi tao bang bam
initialize();
do
{
//menu chinh cua chuong trinh
printf("\n\nchuc nang cua chuong trinh:\n");
printf("1:them nut moi vao bang bam\n");
printf("2:tham ngau nhien nhieu nut vao bang bam\n");
printf("3
oa nut tren bang bam\n");
printf("4
oa toan bo bang bam\n");
printf("5
em chi tiet bang bam\n");
printf("6:tim kiem tren bang bam\n");
printf("0:ket thuc chuong trinh\n");
printf("\nchuc nang ban chon:");
scanf("%d",&chucnang);
switch(chucnang)
{
case 1:
{
printf("\nTHEM NUT VAO BANG BAM");
printf("\nkhoa cua nut moi:");
scanf("%d",&key);
break;
}
case 2:
{
printf("\nTHEM NGAU NHIEN NHIEU NUT VAO BANG BAM");
printf("\ban muon them bao nhieu nut:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
key=random(1000);
insert(key);
}
break;
}
case 3:
{
printf("\nxoa nut tren bang bam");
printf("\nkhoa cua nut can xoa");
scanf("%d",&key);
i=search(key);
if(i==M)
printf("\nkhong co nut voi khoa can xoa");
else
{
remove(i);
N--;
}
break;
}
case 4:
{
printf("\nxoa toan bo bang bam");
printf("nban co chac khong(c/k):");
c=getch();
if(c=='c'||c=='c')
initialize();
break;
}
case 5:
{
printf("\nxem chi tiet bang bam");
viewtable();
break;
}
case 6:
{
printf("\ntim kiem tren bang bam");
printf("\nkhoa can tim:");
if(search(key)==M)
printf("\n khong thay");
else
printf("\ntim thay dia chi %d trong bang bam",search(key));
break;
}
}
scanf("%d",&key);
}
while(chucnang!=0);
return(0);
}
em vẫn chưa tìm đc ý tưởng nào để thiết kế 1 cái giao diện nào ngon ngon cho chương trình này cả.bác nào giỏi về đồ họa trong C trợ giúp em cái::(
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define TRUE 0
#define FALSE -1
#define NULLKEY-1
#define M 100
//khai bao cau truc mot nut cua bang bam
struct node
{
int key; //khoa cua nut tren bang bam
};
//Khai bao bang bam co M nut
struct node hashtable[M];
int N;
/*bien toan cuc chi so nut hien co tren bang bam*/
//ham bam
int hashfunc(int key)
{
return(key %M);
}
//khoi dong bang bam
void initialize()
{
int i;
for(i=0;i<M;i++)
hashtable.key=NULLKEY;
N=0; //so nut hien co khoi dong bang 0
}
//tac vu empty:kiem tra ba bang bam co ranh khong
int empty()
{
return(N==0?TRUE:FALSE);
}
//tac vu full:kiem tra bang bam da day chua
int full()
{
return(N==M-1?TRUE:FALSE);
}
/*----------------------------------------------------------------------------------------------------------------------------------------
tac vu search:tim kiem nut co khoa k tren bang bam,neu khong tim thay ham nay tra ve vi tri M,neu tim thay ham nay tra ve dia chi tim thay
----------------------------------------------------------------------------------------------------------------------------------------*/
int search(int k)
{
int i;
i=hashfunc(k);
while(hashtable.key!=k&&hashtable.key
!=NULLKEY)
{
//bam lai(theo phuong phap do tim tuyen tinh):hi(key)=h(key)+i)%M)
i=i+1;
if(i>=M)
i=i-M;
}
if(hashtable.key==k) //tim thay
return(i);
else //khong tim thay
return(M);
}
//tac vu insert:them nut co khoa k vao bang bam
int insert(int k)
{
int i,j;
if(full())
{
printf("\nbang bam bi da,khong them nut co khoa %d duoc",k);
return(M);
}
i=hashfunc(k);
while(hashtable.key!=NULLKEY)
{
//bam lai (theo phuong phap do tuyen tinh)
i++;
if(i>=M)
i=i-M;
}
hashtable.key=k;
N=N-1;
return(i);
}
//tac vu remove
oa nut tai dia chi i tran bang bamvoid remove(int i)
{
int j,r,cont,a;
cont=TRUE;
do
{
hashtable.key=NULLKEY;
j=i;
do
{
i=i+1;
if(i>=M)
i=i-M;
if(hashtable.key==NULLKEY)
cont=FALSE;
else
{
r=hashfunc(hashtable.key);
a=(j<r&&r<=i)||(r<=i&&i<j)||(i<j&&j<r);
}
}
while(cont&&a);
if(cont)
hashtable[j].key=hashtable.key;
}while(cont);
}
//tac vu viewtable
em chi tiet bang bamvoid viewtable()
{
int i;
for(i=0;i<M;i++)
printf("\ntable[%2s]:%4d",i,hashtable.key);
}
//chuong trinh chinh
main()
{
int i,n,p,q;
int b,key,chucnang;
char c;
clrscr();
//khoi tao bang bam
initialize();
do
{
//menu chinh cua chuong trinh
printf("\n\nchuc nang cua chuong trinh:\n");
printf("1:them nut moi vao bang bam\n");
printf("2:tham ngau nhien nhieu nut vao bang bam\n");
printf("3
oa nut tren bang bam\n");printf("4
oa toan bo bang bam\n");printf("5
em chi tiet bang bam\n");printf("6:tim kiem tren bang bam\n");
printf("0:ket thuc chuong trinh\n");
printf("\nchuc nang ban chon:");
scanf("%d",&chucnang);
switch(chucnang)
{
case 1:
{
printf("\nTHEM NUT VAO BANG BAM");
printf("\nkhoa cua nut moi:");
scanf("%d",&key);
break;
}
case 2:
{
printf("\nTHEM NGAU NHIEN NHIEU NUT VAO BANG BAM");
printf("\ban muon them bao nhieu nut:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
key=random(1000);
insert(key);
}
break;
}
case 3:
{
printf("\nxoa nut tren bang bam");
printf("\nkhoa cua nut can xoa");
scanf("%d",&key);
i=search(key);
if(i==M)
printf("\nkhong co nut voi khoa can xoa");
else
{
remove(i);
N--;
}
break;
}
case 4:
{
printf("\nxoa toan bo bang bam");
printf("nban co chac khong(c/k):");
c=getch();
if(c=='c'||c=='c')
initialize();
break;
}
case 5:
{
printf("\nxem chi tiet bang bam");
viewtable();
break;
}
case 6:
{
printf("\ntim kiem tren bang bam");
printf("\nkhoa can tim:");
if(search(key)==M)
printf("\n khong thay");
else
printf("\ntim thay dia chi %d trong bang bam",search(key));
break;
}
}
scanf("%d",&key);
}
while(chucnang!=0);
return(0);
}
em vẫn chưa tìm đc ý tưởng nào để thiết kế 1 cái giao diện nào ngon ngon cho chương trình này cả.bác nào giỏi về đồ họa trong C trợ giúp em cái::(
, vả lại , theo tui thấy thì cái này giống kiểu lập trình console hơn là window bạn à .