if(start==NULL)
{
tmp->prev=NULL;
// run here , the start==null, so the start->prev is error
start->prev=tmp;//here
start=tmp;
}
On 8月1日, 下午8时41分, Rajesh Kumar <[email protected]> wrote:
> programs gives segmentation fault when we creat linked list
> plz help me
>
> #include<stdio.h>
> #include<malloc.h>
> #include<stdlib.h>
> struct node
> {
> struct node *prev;
> int info;
> struct node *next;
>
> }*start;
>
> main()
> {
> int choice,n,m,po,i;
> start=NULL;
> while(1)
> {
> printf("1.Create List\n");
> printf("2.Add at begining\n");
> printf("3.Add after\n");
> printf("4.Delete\n");
> printf("5.Display\n");
> printf("6.Count\n");
> printf("7.Reverse\n");
> printf("8.exit\n");
> printf("Enter your choice : ");
> scanf("%d",&choice);
> switch(choice)
> {
> case 1:
> printf("How many nodes you want : ");
> scanf("%d",&n);
> for(i=0;i<n;i++)
> {
> printf("Enter the element : ");
> scanf("%d",&m);
> create_list(m);
> }
> break;
> case 2:
> printf("Enter the element : ");
> scanf("%d",&m);
> addatbeg(m);
> break;
> case 3:
> printf("Enter the element : ");
> scanf("%d",&m);
> printf("Enter the position after which this element is inserted
> : ");
> scanf("%d",&po);
> addafter(m,po);
> break;
> case 4:
> printf("Enter the element for deletion : ");
> scanf("%d",&m);
> del(m);
> break;
> case 5:
> display();
> break;
> case 6:
> count();
> break;
> case 7:
> rev();
> break;
> case 8:
> exit(1);
> default:
> printf("Wrong choice\n");
> }/*End of switch*/
> }/*End of while*/
>
> }/*End of main()*/
>
> create_list(int num)
> {
> struct node *q,*tmp;
> tmp= malloc(sizeof(struct node));
> tmp->info=num;
> tmp->next=NULL;
> if(start==NULL)
> {
> tmp->prev=NULL;
> start->prev=tmp;
> start=tmp;
> }
> else
> {
> q=start;
> while(q->next!=NULL)
> q=q->next;
> q->next=tmp;
> tmp->prev=q;
> }
>
> }/*End of create_list()*/
>
> addatbeg(int num)
> {
> struct node *tmp;
> tmp=malloc(sizeof(struct node));
> tmp->prev=NULL;
> tmp->info=num;
> tmp->next=start;
> start->prev=tmp;
> start=tmp;
>
> }/*End of addatbeg()*/
>
> addafter(int num,int c)
> {
> struct node *tmp,*q;
> int i;
> q=start;
> for(i=0;i<c-1;i++)
> {
> q=q->next;
> if(q==NULL)
> {
> printf("There are less than %d elements\n",c);
> return;
> }
> }
> tmp=malloc(sizeof(struct node));
> tmp->info=num;
> q->next->prev=tmp;
> tmp->next=q->next;
> tmp->prev=q;
> q->next=tmp;
>
> }/*End of addafter() */
>
> del(int num)
> {
> struct node *tmp,*q;
> tmp=malloc(sizeof(struct node));
> if(start->info==num)
> {
> tmp=start;
> start=start->next; /*first element deleted*/
> start->prev = NULL;
> free(tmp);
> return;
> }
> q=start;
> while(q->next->next!=NULL)
> {
> if(q->next->info==num) /*Element deleted in between*/
> {
> tmp=q->next;
> q->next=tmp->next;
> tmp->next->prev=q;
> free(tmp);
> return;
> }
> q=q->next;
> }
> if(q->next->info==num) /*last element deleted*/
> { tmp=q->next;
> free(tmp);
> q->next=NULL;
> return;
> }
> printf("Element %d not found\n",num);
>
> }/*End of del()*/
>
> display()
> {
> struct node *q;
> if(start==NULL)
> {
> printf("List is empty\n");
> return;
> }
> q=start;
> printf("List is :\n");
> while(q!=NULL)
> {
> printf("%d ", q->info);
> q=q->next;
> }
> printf("\n");
>
> }/*End of display() */
>
> count()
> { struct node *q=start;
> int cnt=0;
> while(q!=NULL)
> {
> q=q->next;
> cnt++;
> }
> printf("Number of elements are %d\n",cnt);
>
> }/*End of count()*/
>
> rev()
> {
> struct node *p1,*p2;
> p1=start;
> p2=p1->next;
> p1->next=NULL;
> p1->prev=p2;
> while(p2!=NULL)
> {
> p2->prev=p2->next;
> p2->next=p1;
> p1=p2;
> p2=p2->prev; /*next of p2 changed to prev */
> }
> start=p1;
>
> }/*End of rev()*/
>
> --
> Regards
> Rajesh Kumar
--
You received this message because you are subscribed to the Google Groups
"Algorithm Geeks" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/algogeeks?hl=en.