링크드리스트 제발,,,,,도와주세요
뿌잉
링크드리스트(chaining) 방식으로 데이타를 저장할려고하는데 함수를 만들어봣는데 도저히 안돼요 ㅠㅠ제가 간략히 짜본 코드는 여기있는데요;설명을 드리자면,,,node*c_table 은 구조체배열을 인자로 받아서 저장할꺼구요int*table 은 저장할값을 가지고있는 배열이구요int num은 배열의 위치입니다...이코드 어떻게 문제인지좀 설명좀 해주세요 미치겟음 ㅠㅠ추가로 전체소스코드도 미테 붙여놀게요 혹시나 이해안돼시면 보시라궁,,,void chaining(node* c_table, int* table, int num)
{
node *temp=(node*) malloc(sizeof(node));
head=&c_table[num];while(head-link!=NULL)
head=head-link;
head-link=temp;
temp-key=table[num];
temp-link=NULL;
head=NULL;
collision+=1;
}전체소스#include stdio.h
#include stdlib.h
#include time.hint collision=0;struct node{
int key;
struct node* link;
};
typedef struct node node;node chain_table[211];
node* head;
node* cmd;
void struct_reset(node* arr, int* table, int len);// 구조체 배열 초기화 함수
void table_reset(int* arr, int len);// 변수 테이블 초기화 함수
long rand_num();// 0~999999중의 랜덤값을 리턴하는 함수
int shift_fold(int* arr, int index, int t_len);// 쉬프트폴딩을 하는 함수
int bound_fold(int* arr, int index,int t_len);// 바운더리폴딩을 하는 함수
int Quad_Prob(int* arr, int* Q_arr, int index);// 데이터 충돌시 Quadratic_Probing방식을 구현하는 함수
void chaining(node* c_table, int* table, int num);// 데이터 충돌시 링크드리스트 방식을 구현하는 함수int main()
{
int sel1,sel2,sel3; // sel1=테이블 사이즈 선택 sel2=폴딩 방식 선택 sel3=데이터 충돌시 해결방법
int i,j;
int tablesize;int table[211];
int fold_table[211];
int Q_table[211];
printf(테이블 사이즈를 선택하세요 1.101 2.211 : );
scanf(%d, &sel1);printf(폴딩 방법을 선택하세요 1.Shift Folding 2.Boundary Folding : );
scanf(%d, &sel2);printf(데이타 충돌시 해결 방법을 선택하세요 1.Quadratic_Probing 2.chaining : );
scanf(%d, &sel3);if(sel1==1)
tablesize=101;
else
tablesize=211;table_reset(table, tablesize);srand(time(NULL));if(sel1==1)
{
for(i=0;itablesize;i++)
table[i]=rand_num();struct_reset(chain_table, table, tablesize);
if(sel2==1)
{
for(i=0;itablesize;i++)
fold_table[i]=shift_fold(table, i, tablesize);
for(i=0;itablesize;i++)
{
for(j=0;jtablesize;j++)
{
if(i==j)
continue;
if(fold_table[i]==fold_table[j])
{
if(sel3==1)
{
Quad_Prob(table, Q_table, j);
}
else
chaining(chain_table, table, i);
}
}
}
}
else
{
for(i=0;itablesize;i++)
fold_table[i]=bound_fold(table, i, tablesize);
for(i=0;itablesize;i++)
{
for(j=0;jtablesize;j++)
{
if(i==j)
continue;
if(fold_table[i]==fold_table[j])
{
if(sel3==1)
{
Quad_Prob(table, Q_table, j);
}
else
chaining(chain_table, table, i);
}
}
}
}
}
else
{
for(i=0;itablesize;i++)
table[i]=rand_num();struct_reset(chain_table, table, tablesize);
if(sel2==1)
{
for(i=0;itablesize;i++)
fold_table[i]=shift_fold(table, i, tablesize);
p;
for(i=0;itablesize;i++)
{
for(j=0;jtablesize;j++)
{
if(i==j)
continue;
if(fold_table[i]==fold_table[j])
{
if(sel3==1)
{
Quad_Prob(table, Q_table, j);
}
else
chaining(chain_table, table, i);
}
}
}
}
else
{
for(i=0;itablesize;i++)
fold_table[i]=bound_fold(table, i, tablesize);
for(i=0;itablesize;i++)
{
for(j=0;jtablesize;j++)
{
if(i==j)
continue;
if(fold_table[i]==fold_table[j])
{
if(sel3==1)
{
Quad_Prob(table, Q_table, j);
}
else
chaining(chain_table, table, i);
}
}
}
}
}
if(sel3=1)
{
printf(순서 랜덤값 폴딩값 저장위치 \n);
for(i=0;itablesize;i++)
{
printf(%3d %12d %10d %17d \n,i+1, table[i], fold_table[i], Q_table[i]);}
}
else
{
printf(순서 랜덤값 폴딩값 저장위치 \n);
for(i=0;itablesize;i++)
{
printf(%3d %12d %10d %17d ,i+1, table[i], fold_table[i], chain_table[i].key);
while(chain_table[i].link != NULL)
{
cmd=chain_table[i].link;
printf( %d, cmd-key);
chain_table[i].link=cmd-link;
}
printf(\n);
}
}
return 0;
}void struct_reset(node* arr, int* table, int len)//구조체 초기화 함수
{
int i;
for(i=0;ilen;i++)
{
arr[i].key=table[i];
arr[i].link= NULL;
}
}void table_reset(int* arr, int len) // 테이블 초기화 함수
{
int i;
for(i=0;ilen;i++)
{
arr[i]= -1;
}
}long rand_num() // 0~999999중의 랜덤값을 리턴하는 함수
{
long val;
val=(((long) rand()15) | rand()) %1000000;
return val;
}int shift_fold(int* arr, int index, int t_len)
{
int val,val1;
val=arr[index]/1000;
val1=arr[index]-val*1000;
return (val+val1)%t_len;
}int bound_fold(int* arr, int index,int t_len)
{
int val,val1,result;
int x,y,z;
val=arr[index]/1000;
val1=arr[index]-val*1000;
x=val/100;
y=val%10;
z=(val%100)-(val%100)%10;
result=x+y*100+z*10;
return (val+result)%t_len;
}int Quad_Prob(int* arr, int* Q_arr, int index)
{
int n;// 새로운 키값을 할당받는 변수
collision+=1;
n=((arr[index])+collision*collision);
if(n100)//인덱스를 0~100으로 주기
n%=101;
return n;}void chaining(node* c_table, int* table, int num)
{
node *temp=(node*) malloc(sizeof(node));
head=&c_table[num];while(head-link!=NULL)
head=head-link;
head-link=temp;
temp-key=table[num];
temp-link=NULL;
head=NULL;
collision+=1;
}
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2700484 | 두 개가 차이가 뭔지 알려주세요...(소수 찾는 프로그램) (2) | 날위해 | 2025-07-05 |
2700426 | 인터넷 창 띄우는 질문이요 (1) | 정훈 | 2025-07-04 |
2700400 | 원넓이를 계산이요 ㅜㅜ | 천칭자리 | 2025-07-04 |
2700368 | if에 관해서 질문이요... | Orange | 2025-07-04 |
2700339 | 이거 결과값이 왜이런건지.. (4) | 그댸와나 | 2025-07-04 |
2700313 | 파일 읽어서 저장하는데 빈파일일 경우 문재가 발생하네요.. (2) | 크나 | 2025-07-03 |
2700287 | 구조체 동적할당 연습을 하는데 오류가 뜹니다...(해결) (3) | 아련나래 | 2025-07-03 |
2700264 | 문자와 숫자 동시에 입력??? | 글고운 | 2025-07-03 |
2700236 | txt파일로만 쓰고 읽게 하려면 어떻게 해야 하나요..?? (8) | 미국녀 | 2025-07-03 |
2700211 | 전위 연산자 (2) | 어른처럼 | 2025-07-02 |
2700183 | C에서 파일이름을 받고, 그 파일의 사이즈를 출력해줘야하는데 내용이 출력이 안되네요 ;ㅅ; | 피스케스 | 2025-07-02 |
2700150 | 꼭좀 도와주세요ㅠㅠㅠ | 호습다 | 2025-07-02 |
2700095 | 연산문제...질문... | 오빤테앵겨 | 2025-07-01 |
2700070 | while문 , 3의배수 출력하는 프로그램좀 짜주세욤. | 횃불 | 2025-07-01 |
2700041 | 초보인데요 ㅎ 배열안에 배열을 집어넣을수 있나요?? | 헛장사 | 2025-07-01 |
2700012 | 배열// (1) | 전갈자리 | 2025-07-01 |
2699895 | 무한루프에 빠집니다.!! 해결좀부탁드려요 (10) | 선아 | 2025-06-30 |
2699842 | 질문을 너무 많이 하네여.....죄송.... (2) | 해님꽃 | 2025-06-29 |
2699816 | 오류 질문입니다.. (1) | 해비치 | 2025-06-29 |
2699763 | 질문입니다 ! 꼭 좀 도와주세요ㅠㅠ (2) | 미라 | 2025-06-28 |