SINGLE LINKED LIST
MEMBUAT SINGLE LINKED LIST
1. Berikut ini merupakan source codenya :
#include
#include
struct NODE {
int number;
struct NODE *next;
};
void append_node(struct NODE *llist, int num);
int search_value(struct NODE *llist, int num);
void display_list(struct NODE *llist);
int main(void) {
int num = 0;
int input = 5;
int retval = 0;
struct NODE *llist;
llist = (struct NODE *)malloc(sizeof(struct NODE));
llist->number = 0;
llist->next = NULL;
while(input != 0) {
printf("\n===== Pilih Menu =====\n");
printf("0: Keluar\n");
printf("1: Insert\n");
printf("2: Search\n");
printf("3: Tampilkan\n");
printf("\nPilihan: ");scanf("%d", &input);
if(input==0){
printf("...Terimakasih...\n");
}
else if(input==1){
printf("Anda Memilih: 'Insert'\n");
printf("Masukkan Nilai Yang Akan di Insert: ");
scanf("%d", &num);
append_node(llist, num);
}
else if(input==2){
printf("Anda Memilih: 'Search'\n");
printf("Masukkan Nilai Yang Akan di Cari (Search): ");
scanf("%d", &num);
if((retval = search_value(llist, num)) == -1)
printf("Value `%d' not found\n", num);
else
printf("Value `%d' located at position `%d'\n", num, retval);
}
else if(input==3){
printf("Anda Memilih: 'Tampilkan'\n");
display_list(llist);
}}
free(llist);
return(0);
}
void append_node(struct NODE *llist, int num) {
while(llist->next != NULL)
llist = llist->next;
llist->next = (struct NODE *)malloc(sizeof(struct NODE));
llist->next->number = num;
llist->next->next = NULL;
}
int search_value(struct NODE *llist, int num) {
int retval = -1;
int i = 1;
while(llist->next != NULL) {
if(llist->next->number == num)
return i;
else
i++;
llist = llist->next;
}
return retval;
}
void display_list(struct NODE *llist) {
while(llist->next != NULL) {
printf("%d ", llist->number);
llist = llist->next;
}
printf("%d", llist->number);
}
OUTPUT :
2. SOURCE CODE untuk single linked list yg fungsi nya dapat menghapus data
#include
#include
#include
struct human{
int age;
char name[30];
human *next;
}*head, *tail, *current;
void pushTail(int age, char name[]){
current = (human*)malloc(sizeof(struct human));
current->age = age;
strcpy(current->name, name);
if(head == NULL){
head = tail = current;
}
else{
tail->next = current;
tail = current;
}
tail->next = NULL;
}
void pushHead(int age, char name[]){
current = (human*)malloc(sizeof(struct human));
current->age = age;
strcpy(current->name, name);
if(head == NULL){
head = tail = current;
}
else{
current->next = head;
head = current;
}
}
void pushMid(int age, char name[]){
current = (human*)malloc(sizeof(struct human));
current->age = age;
strcpy(current->name, name);
if(head == NULL){
head = tail = current;
}
else if(current->age < head->age){
pushHead(age, name);
}
else if(current->age > tail->age){
pushTail(age, name);
}
else{
human *temp = head;
while(temp->next->age < current->age){
temp = temp->next;
}
current->next = temp->next;
temp->next = current;
}
}
void popHead(){
current=head;
if(head==NULL){
printf("No data");
}else if(head==tail){
head=tail=NULL;
free(current);
}else{
head=head->next;
free(current);
}
}
void popTail(){
if(head==NULL){
printf("No data");
}else if(head==tail){
head=tail=NULL;
free(current);
}else{
human *temp=head;
while(temp->next!=tail){
temp=temp->next;
}
current=tail;
tail=temp;
free(current);
tail->next=NULL;
}
}
void popMid(int age){
current=head;
if(head==NULL){
printf("No data");
}else if(head->age==age){
popHead();
}else if(tail->age==age){
popTail();
}else{
human *temp=head;
while(temp->next->age!=age && temp!=tail){
temp=temp->next;
}
current=temp->next;
temp->next=temp->next->next;
free(current);
}
}
void popAll(){
while(head!=NULL){
popHead();
}
}
void print(){
current = head;
while(current != NULL){
printf("%s - %d\n",current->name,current->age);
current = current->next;
}
}
int main(){
pushMid(18, "hery");
pushMid(17, "mahirkoding");
pushTail(22, "andi");
pushHead(15, "tono");
pushMid(11, "vandoro");
pushMid(23, "budi");
popHead();
popTail();
popMid(15);
//popAll();
print();
getchar();
return 0;
}
1. Berikut ini merupakan source codenya :
#include
#include
struct NODE {
int number;
struct NODE *next;
};
void append_node(struct NODE *llist, int num);
int search_value(struct NODE *llist, int num);
void display_list(struct NODE *llist);
int main(void) {
int num = 0;
int input = 5;
int retval = 0;
struct NODE *llist;
llist = (struct NODE *)malloc(sizeof(struct NODE));
llist->number = 0;
llist->next = NULL;
while(input != 0) {
printf("\n===== Pilih Menu =====\n");
printf("0: Keluar\n");
printf("1: Insert\n");
printf("2: Search\n");
printf("3: Tampilkan\n");
printf("\nPilihan: ");scanf("%d", &input);
if(input==0){
printf("...Terimakasih...\n");
}
else if(input==1){
printf("Anda Memilih: 'Insert'\n");
printf("Masukkan Nilai Yang Akan di Insert: ");
scanf("%d", &num);
append_node(llist, num);
}
else if(input==2){
printf("Anda Memilih: 'Search'\n");
printf("Masukkan Nilai Yang Akan di Cari (Search): ");
scanf("%d", &num);
if((retval = search_value(llist, num)) == -1)
printf("Value `%d' not found\n", num);
else
printf("Value `%d' located at position `%d'\n", num, retval);
}
else if(input==3){
printf("Anda Memilih: 'Tampilkan'\n");
display_list(llist);
}}
free(llist);
return(0);
}
void append_node(struct NODE *llist, int num) {
while(llist->next != NULL)
llist = llist->next;
llist->next = (struct NODE *)malloc(sizeof(struct NODE));
llist->next->number = num;
llist->next->next = NULL;
}
int search_value(struct NODE *llist, int num) {
int retval = -1;
int i = 1;
while(llist->next != NULL) {
if(llist->next->number == num)
return i;
else
i++;
llist = llist->next;
}
return retval;
}
void display_list(struct NODE *llist) {
while(llist->next != NULL) {
printf("%d ", llist->number);
llist = llist->next;
}
printf("%d", llist->number);
}
OUTPUT :
2. SOURCE CODE untuk single linked list yg fungsi nya dapat menghapus data
#include
#include
#include
struct human{
int age;
char name[30];
human *next;
}*head, *tail, *current;
void pushTail(int age, char name[]){
current = (human*)malloc(sizeof(struct human));
current->age = age;
strcpy(current->name, name);
if(head == NULL){
head = tail = current;
}
else{
tail->next = current;
tail = current;
}
tail->next = NULL;
}
void pushHead(int age, char name[]){
current = (human*)malloc(sizeof(struct human));
current->age = age;
strcpy(current->name, name);
if(head == NULL){
head = tail = current;
}
else{
current->next = head;
head = current;
}
}
void pushMid(int age, char name[]){
current = (human*)malloc(sizeof(struct human));
current->age = age;
strcpy(current->name, name);
if(head == NULL){
head = tail = current;
}
else if(current->age < head->age){
pushHead(age, name);
}
else if(current->age > tail->age){
pushTail(age, name);
}
else{
human *temp = head;
while(temp->next->age < current->age){
temp = temp->next;
}
current->next = temp->next;
temp->next = current;
}
}
void popHead(){
current=head;
if(head==NULL){
printf("No data");
}else if(head==tail){
head=tail=NULL;
free(current);
}else{
head=head->next;
free(current);
}
}
void popTail(){
if(head==NULL){
printf("No data");
}else if(head==tail){
head=tail=NULL;
free(current);
}else{
human *temp=head;
while(temp->next!=tail){
temp=temp->next;
}
current=tail;
tail=temp;
free(current);
tail->next=NULL;
}
}
void popMid(int age){
current=head;
if(head==NULL){
printf("No data");
}else if(head->age==age){
popHead();
}else if(tail->age==age){
popTail();
}else{
human *temp=head;
while(temp->next->age!=age && temp!=tail){
temp=temp->next;
}
current=temp->next;
temp->next=temp->next->next;
free(current);
}
}
void popAll(){
while(head!=NULL){
popHead();
}
}
void print(){
current = head;
while(current != NULL){
printf("%s - %d\n",current->name,current->age);
current = current->next;
}
}
int main(){
pushMid(18, "hery");
pushMid(17, "mahirkoding");
pushTail(22, "andi");
pushHead(15, "tono");
pushMid(11, "vandoro");
pushMid(23, "budi");
popHead();
popTail();
popMid(15);
//popAll();
print();
getchar();
return 0;
}