2016-12-19 2 views
0
#include<stdio.h> 
#include<malloc.h> 
struct node 
{ 
    int data; 
    struct node *next; 
}; 
struct node* insert_beg(struct node *h,int x) 
{ 
    struct node *t; 
    printf("\n address = %u --- ",*h); 
    t=(struct node *)malloc(sizeof(struct node)); 
    if(h==NULL) 
    { 
     t->data=x; 
     t->next=NULL; 
     h=t; 
    } 
    else 
    { 


     t->data=x; 
     t->next=h; 
     h=t; 
    } 
    return h; 

} 
void display(struct node *h1) 
{ 
    struct node *t=h1; 
    while(t->next!=NULL) 
    { 
     printf("%d->",t->data); 
     t=t->next; 
    } 
} 
int main() 
{ 
    struct node *p=NULL; 
    int a,ch=5; 
    while(ch--) 
    { 

    printf("\n Enter data"); 
    scanf("%d",&a); 
    p=insert_beg(p,a); 
    display(p); 
    }display(p); 

} 

Вышеупомянутый код для вставки элемента в начале единственного связанного списка ссылок в c.Программа, вставляющая элемент в односвязный список

Код успешно компилируется, но когда я пытаюсь вставить элемент, зависающий системой ... Не найти ошибку. Может ли кто-нибудь предложить исправление, которое мне нужно сделать.

Есть ошибки в выражении, упомянутом ниже ... Нужна помощь.

p=insert_beg(p,a); 
+0

Что вы имеете в виду под «[я] есть ли какая-либо ошибка в выражении, упомянутом ниже "? Вы имеете в виду, что вы получаете ошибку сборки на этой строке? Или вы имеете в виду, что вы получаете сбой при запуске программы? Или вы просто задаетесь вопросом, правильная ли строка (без фактического создания/запуска вашей программы)? Пожалуйста, дополните. Если вы столкнулись с крахом во время выполнения, попробовали ли вы запустить отладку в отладчике, чтобы поймать крах в действии и найти, где это происходит в вашем коде? –

+3

delete 'printf (" \ n address =% u --- ", * h);' Также в 'display':' while (t-> next! = NULL) '->' while (t! = NULL) ' – BLUEPIXY

+1

не забудьте освободить память для узла, я вижу в нем память freak() –

ответ

0
while(t->next!=NULL) 

должно быть:

while(t!=NULL) 

также, ваша функция вставки может быть упрощена:

struct node* insert_beg(struct node *h,int x) 
{ 
    struct node *t; 
    t=(struct node *)malloc(sizeof(struct node)); 
    t->data=x; 
    t->next=h; 
    return t; 
} 
+0

Да, это делает код более читаемым. –

0

У вас ошибка в:

printf("\n address = %u --- ",*h); 

Попытка напечатать всю структуру.

В общем использовании debbuger для этого, как пояснил here

Вы можете скомпилировать программу с отладочной информацией следующим образом:

gcc -o main -g main.c 

И запустить его в БГД:

gdb main 

Тип команда «запустить» внутри gdb, если она не удалась, вы можете использовать «обратную трассировку», чтобы получить информацию о загрузке. Поучитесь с учебниками gdb, так как manual может сначала напугать вас.

+0

Thanx много ... Я хорошо работаю, просто удалив –

+0

У меня была разыменованная h, изначально которой было назначено значение NULL. –

1
#include<stdio.h> 
#include<malloc.h> 
struct node 
{ 
    int data; 
    struct node *next; 
}; 
struct node* insert_beg(struct node *h,int x) 
{ 
    struct node *t; 
    t=(struct node *)malloc(sizeof(struct node)); 
    if(h==NULL) 
    { 
     t->data=x; 
     t->next=NULL; 
     h=t; 
    } 
    else 
    { 
     t->data=x; 
     t->next=h; 
     h=t; 
    } 
    return h; 
} 
void display(struct node *h1) 
{ 
    struct node *t=h1; 
    while(t->next!=NULL) 
    { 
     printf("%d->",t->data); 
     t=t->next; 
    } 
    printf("%d",t->data); 
} 
int main() 
{ 
    struct node *p=NULL; 
    int a,ch=5; 
    while(ch>=0) 
    { 
     printf("\n Enter data:-"); 
     scanf("%d",&a); 
     p=insert_beg(p,a); 
     display(p); 
     ch--; 
    } 
    display(p); 

}

+0

Мне нужен этот код в моей программе. Помог мне, где я застрял. Спасибо за помощь – Pankti

+0

где вы поразили @Pankti –

Смежные вопросы