Hi All,
For a while I've been stuck on something and I couldn't get out of it,
Simply, I'm trying to create and linked list while using "stack" method, and as I'm doing this, I must
use Hashing algorithm, I'm so alien to linked list, after I worked on them I understood the logic of
it, but still Im having many problems.
First Of All, while doing hashing in linked list, I have to declare an Array and Each item in
the array is a pointer to the linked list (stack) of the input(ID,number..) mapped to that index.
According to my understandings I've created this kind of algorithm but first I ve tried to do it
without using any hashing, I tried to do simple stack program, now I want to add hashing function
into this, however I got confused, everything got confused...
Here is my program, what do you think thet where I'm wrong at, and where I'm supposed to work on or change,
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LENGTH 10
typedef struct student {
int id;
struct student* next;
char name[10];
char surname[10];
}students;
void push( students** head, int key,char name[30],char surname[30] );
int menu(); // I gotta pass something after created hash and array
void insert(); // I gotta pass something after created hash and array
void search();// I gotta pass something after created hash and array
void readfile();// I gotta pass something after created hash and array
void writefile();// I gotta pass something after created hash and array
int key;
char name[30];
char surname[30];
students* head = NULL;
students* current;
students* current2;
void main() {
typedef struct students_* student; // not used in program
student students_[LENGTH]; //not used in program
students* head = NULL;
int choice;
readfile(&head);
while(choice!=0){
choice=menu();
switch(choice){
case 0:
break;
case 1:
search(&head);
break;
case 2:
insert();
break;
/* case 3:
count();
break;*/
case 4:
list(&head);
break;
}
}
writefile(&head);
}
void push( students** head, int key,char name[30],char surname[30] ) {
students* new;
new = malloc(sizeof(students));
new->id = key;
strcpy(new->name,name);
strcpy(new->surname,surname);
new->next = *head;
*head = new;
}
int menu(){
int x;
printf("\nTo Exit Press\t0\nTo Search Press\t1\nTo Insert Press\t2\nTo Count Press\t3\nTo List Press\t4\n");
scanf("%d",&x);
clrscr();
return x;
}
//------------------------------------------------------------------------
void insert(){
do {
printf("Enter The ID To Exit Press 0\n");
scanf("%d", &key);
if(key==0)
break;
printf("Enter The Name\n");
scanf("%s",name);
printf("Enter The Surname\n");
scanf("%s",surname);
if ( key != 0 )
push( &head, key,name,surname);
} while ( key != 0 );
I must've done somethings wrong, because even doing a simple stack, everything goes wrong, because when I enter an ID and name, then I searched it, or list it, after listing or searching, if I want to list or search second time, it doesnt give anything, I 'm not sure but I think because of some reason program lost the head of stack. Maybe I declared something globally that's why it happens but I dont know