| | |
Singly Linked List Implementation
Please support our C advertiser: Programming Forums - DaniWeb Sister Site
This program just demonstrate how a node can be added,deleted,searched,counted,and printed using Singly Linked List.
An easy code to understand
An easy code to understand
////////////////////////////////////////////////////////////// ////////// -: Singly Link list :- ///////// //////////////////////////////////////////////////////////// /* reference : Understandng pointer though c - Y karnetkar. */ ////////////////////////////////////////////////////////// ////////// Programmer : Harsh chandra /////////// //////////////////////////////////////////////////////// # include<stdio.h> # include<conio.h> # include<alloc.h> # include<stdlib.h> struct node { int data; struct node *link; }; void append(struct node **,int); void in_begin(struct node **,int); void del(struct node **,int); void in_middle(struct node **,int,int); int count(struct node *); void display(struct node *); void main() { struct node *p; /* p can be said as the head or a start ptr */ p=NULL; /* Printing the menu */ int num,loc; char choice; do { clrscr(); printf("PROGRAM TO IMPLEMENT SINGLY LINKED LIST "); printf("\n====================================="); printf("\n\n1.Create \\ Appending The List"); printf("\n2.Insert Node At Begining"); printf("\n3.Insert Node In Middle"); printf("\n4.Deleting a Node"); printf("\n5.Counting The No Of Nodes"); printf("\n6.Displaying the list"); printf("\n7.Exit"); oper: gotoxy(1,15);printf(" "); gotoxy(1,11);printf("\n\nEnter ur Choice : "); choice=getch(); switch(choice) { case '1': char ans; do { printf("Enter any number : "); scanf("%d",&num); append(&p,num); printf("Enter more (y/n) :"); fflush(stdin); ans=getchar(); }while(ans !='n'); break; case '2': printf("Enter The Data : "); scanf("%d",&num); in_begin(&p,num); break; case '3': printf("\nEnter The Position :"); scanf("%d",&loc); printf("\nEnter The Data : "); scanf("%d",&num); in_middle(&p,loc,num); break; case '4': printf("\nEnter The Data u Want To Delete : "); scanf("%d",&num); del(&p,num); break; case '5': printf("\nThe No Of Nodes Are %d",count(p)); getch(); break; case '6': display(p); getch(); break; case '7': printf("\n\nQuiting......."); getch(); exit(0); break; default: gotoxy(1,15);printf("Invalid choice.Please Enter Correct Choice"); getch(); goto oper; } }while(choice !=7); } void append(struct node **q,int num) { struct node *temp,*r; temp = *q; if(*q==NULL) { temp = (struct node *)malloc(sizeof(struct node)); temp->data=num; temp->link=NULL; *q=temp; } else { temp = *q; while(temp->link !=NULL) { temp=temp->link; } r = (struct node *)malloc(sizeof(struct node)); r->data=num; r->link=NULL; temp->link=r; } } void display(struct node *q) { if(q==NULL) { printf("\n\nEmpty Link List.Can't Display The Data"); getch(); goto last; } while(q!=NULL) { printf("\n%d",q->data); q=q->link; } last: } int count(struct node *q) { int c=0; if(q==NULL) { printf("Empty Link List.\n"); getch(); goto last; } while(q!=NULL) { c++; q=q->link; } last: return c; } void in_begin(struct node **q,int num) { struct node *temp; if(*q==NULL) { printf("Link List Is Empty.Can't Insert."); getch(); goto last; } else { temp=(struct node *)malloc(sizeof(struct node)); temp->data=num; temp->link=*q; *q=temp; /* pointing to the first node */ } last: getch(); } void in_middle(struct node **q,int loc,int num) { struct node *temp,*n; int c=1,flag=0; temp=*q; if(*q==NULL) { printf("\n\nLink List Is Empty.Can't Insert."); getch(); goto last; } else while(temp!=NULL) { if(c==loc) { n = (struct node *)malloc(sizeof(struct node)); n->data=num; n->link=temp->link; temp->link=n; flag=1; } c++; temp=temp->link; } if(flag==0) { printf("\n\nNode Specified Doesn't Exist.Cant Enter The Data"); getch(); } else { printf("Data Inserted"); getch(); } last: getch(); } void del(struct node**q,int num) { if(*q==NULL) { printf("\n\nEmpty Linked List.Cant Delete The Data."); getch(); goto last; } else { struct node *old,*temp; int flag=0; temp=*q; while(temp!=NULL) { if(temp->data==num) { if(temp==*q) /* First Node case */ *q=temp->link; /* shifted the header node */ else old->link=temp->link; free(temp); flag=1; } else { old=temp; temp=temp->link; } } if(flag==0) printf("\nData Not Found..."); else printf("\nData Deleted...Tap a key to continue"); getch(); } last: getch(); }
0
•
•
•
•
Your code is really awesome, I've personally tested and almost everything works great... Just one thing generates an error...
And I wanna show you how I fixed it...
<code>
if(temp->data==num)
{ if(temp==*q) /* First Node case */
*q=temp->link; /* shifted the header node */
//If I want to delete the first node, the code will blow up and I use the follow lines to fix it
free(temp);
flag = 1;
//Just the same thing that you show after the else
else
old->link=temp->link;
</code>
Thanks...!
And I wanna show you how I fixed it...
<code>
if(temp->data==num)
{ if(temp==*q) /* First Node case */
*q=temp->link; /* shifted the header node */
//If I want to delete the first node, the code will blow up and I use the follow lines to fix it
free(temp);
flag = 1;
//Just the same thing that you show after the else
else
old->link=temp->link;
</code>
Thanks...!
0
•
•
•
•
Hi Harsh ..
The code is awesome . thanks for posting it . I tested it on Dev C Compiler .
But I got an error in the delete function .
Since there is no break statement , the program goes in a while loop . I just modified the code as below and it worked :-)
if(temp->data == num)
{
if(temp == *q)
{
*q=temp->link;
free(temp);
flag = 1;
break;
}
else
{
old->link = temp->link;
free(temp);
flag = 1;
break;
}
}
The code is awesome . thanks for posting it . I tested it on Dev C Compiler .
But I got an error in the delete function .
Since there is no break statement , the program goes in a while loop . I just modified the code as below and it worked :-)
if(temp->data == num)
{
if(temp == *q)
{
*q=temp->link;
free(temp);
flag = 1;
break;
}
else
{
old->link = temp->link;
free(temp);
flag = 1;
break;
}
}
0
•
•
•
•
dudes, i compiled this program in gcc compiler but i gotta error msg while passing &p to append function. error message is "incompatible pointer type","expected to be struct node ** but it is struct node **". please anyone help me out.
Similar Threads
- Performing MergeSort on a singly linked list (C#)
- Singly Linked List - help with error (C++)
- Reversing singly linked list? (C++)
- help implementing singly linked list (C++)
- problem with singly linked list (C++)
| Thread Tools | Search this Thread |
adobe api array arrays binarysearch calculate char cm convert copyanyfile copypdffile cprogramme createcopyoffile createprocess() csyntax directory dynamic feet fflush file floatingpointvalidation fork forloop frequency getlasterror givemetehcodez global graphics gtkgcurlcompiling hacking hardware highest homework i/o inches incrementoperators initialization iso kernel kilometer km linked linkedlist linux linuxsegmentationfault list lists locate logical_drives loopinsideloop. match matrix microsoft motherboard mqqueue mysql odf open opensource openwebfoundation owf pattern pdf performance pointer pointers posix power probleminc program programming pyramidusingturboccodes read recursion recv recvblocked repetition research scanf scheduling scripting segmentationfault send shape socketprograming socketprogramming stack standard string suggestions systemcall test testautomation unix urboc user voidmain() wab win32api windows.h




