Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <malloc.h>
- struct node
- {
- int data;
- struct node *next;
- };
- struct node *link = NULL;
- void create_ll();
- void display();
- void insert_beginning();
- void insert_end();
- void insert_before();
- void insert_after();
- void delete_beginning();
- void delete_end();
- void delete_target();
- void delete_after();
- void delete_all();
- int main(){
- int option;
- do{
- printf("\n1. Create a list");
- printf("\n2. Display a list");
- printf("\n3. Add node at beginning");
- printf("\n4. Add node at end");
- printf("\n5. Add node before a given node");
- printf("\n6. Add node after a given node");
- printf("\n7. Delete node at beginning");
- printf("\n8. Delete node at end");
- printf("\n9. Delete a given node");
- printf("\n10. Delete a node after a given node");
- printf("\n11. Delete all");
- printf("\n12. Sort list");
- printf("\n13. EXIT");
- printf("\n\n Enter your option : ");
- scanf("%d", &option);
- switch(option){
- case 1 : create_ll();
- printf("Linked List created");
- break;
- case 2 : display();
- break;
- case 3 : insert_beginning();
- break;
- case 4 : insert_end();
- break;
- case 5 : insert_before();
- break;
- case 6 : insert_after();
- break;
- case 7 : delete_beginning();
- break;
- case 8 : delete_end();
- break;
- case 9 : delete_target();
- break;
- case 10 : delete_after();
- break;
- case 11 : delete_all();
- break;
- case 12 :
- //TODO bubble sort di buku
- break;
- }
- }while(option != 13);
- getchar();
- return 0;
- }
- void create_ll(){
- struct node *new_node, *ptr;
- int num;
- do{
- printf("\n Enter the data : ");
- scanf("%d", &num);
- //fflush(stdin);
- new_node = (struct node*)malloc(sizeof(struct node));
- new_node->data = num;
- if(link == NULL){
- new_node->next = NULL;
- link = new_node;
- }
- else{
- ptr = link;
- while(ptr->next != NULL){
- ptr = ptr->next;
- }
- ptr->next = new_node;
- new_node->next = NULL;
- }
- }while(num != -1);
- }
- void display(){
- struct node *ptr;
- ptr = link;
- while(ptr->next != NULL){
- printf("\t %d", ptr->data);
- ptr = ptr->next;
- }
- }
- void insert_beginning(){
- struct node *new_node;
- new_node = (struct node*)malloc(sizeof(struct node));
- printf("\n Enter the data : ");
- scanf("%d", &new_node->data);
- new_node->next = link;
- link = new_node;
- }
- //TODO bug input jd -1
- void insert_end(){
- struct node *new_node, *ptr;
- new_node = (struct node*)malloc(sizeof(struct node));
- ptr = link;
- printf("\n Enter the data : ");
- scanf("%d", &new_node->data);
- //fflush(stdin);
- while(ptr->next != NULL){
- ptr = ptr->next;
- }
- ptr->next = new_node;
- new_node->next = NULL;
- }
- void insert_before(){
- struct node *new_node, *ptr, *preptr;
- int pivot;
- new_node = (struct node*)malloc(sizeof(struct node));
- ptr = link;
- preptr = link;
- printf("\n Enter the data : ");
- scanf("%d", &new_node->data);
- printf("\n Enter the value before which the data has to be inserted : ");
- scanf("%d", &pivot);
- while(ptr->data != pivot){
- preptr = ptr;
- ptr = ptr->next;
- }
- preptr->next = new_node;
- new_node->next = ptr;
- }
- //TODO kalo void (gk return) selalu crash, pdhl insert_before bisa
- void insert_after(){
- struct node *new_node, *ptr, *preptr;
- int pivot;
- new_node = (struct node*)malloc(sizeof(struct node));
- ptr = link;
- preptr = link;
- printf("\n Enter the data : ");
- scanf("%d", &new_node->data);
- printf("\n Enter the value after which the data has to be inserted : ");
- scanf("%d", &pivot);
- while(preptr->data != pivot){
- preptr = ptr;
- ptr = ptr->next;
- }
- preptr->next = new_node;
- new_node->next = ptr;
- }
- void delete_beginning(){
- struct node *ptr;
- ptr = link;
- link = link->next;
- free(ptr);
- }
- void delete_end(){
- struct node *ptr, *preptr;
- ptr = link;
- preptr = link;
- while(ptr->next != NULL){
- preptr = ptr;
- ptr = ptr->next;
- }
- free(ptr);
- preptr->next = NULL;
- }
- void delete_target(){
- struct node *ptr, *preptr;
- int target;
- ptr = link;
- preptr = link;
- printf("\n Enter the data : ");
- scanf("%d", &target);
- if(ptr->data == target){
- delete_beginning(ptr);
- }
- else{
- while(ptr->data != target){
- preptr = ptr;
- ptr = ptr->next;
- }
- preptr->next = ptr->next;
- free(ptr);
- }
- }
- void delete_after(){
- struct node *ptr, *preptr;
- int pivot;
- ptr = link;
- preptr = link;
- printf("\n Enter the data : ");
- scanf("%d", &pivot);
- if(preptr->data == pivot){
- ptr = ptr->next;
- }
- //kalo delete pertama msh salah, karena ptr = ptr->next; cmn ada di dalam while
- while(preptr->data != pivot){
- preptr = ptr;
- ptr = ptr->next;
- }
- preptr->next = ptr->next;
- free(ptr);
- }
- void delete_all(){
- struct node *ptr;
- ptr = link;
- while(ptr->next != NULL){
- delete_beginning(ptr);
- ptr = ptr->next;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment