下面是我的程序,我已经尝试了几种方法,但我无法得出结论,因此卡住了,有人可以帮忙吗?
有什么问题,还有其他方法吗?
struct Node
{
int data;
struct Node *prev,*next;
};
插入元素
void push(struct Node *start,struct Node *end,int x,int loc)
{
struct Node *new=(struct Node*)malloc(sizeof(struct Node));
new->data=x;
if(start==NULL)
{
new->next=NULL;
new->prev=NULL;
start=new;
end=new;
}
else
{
if(loc==1)
{
new->prev=NULL;
new->next=start;
start->prev=new;
start=new;
}
else
{
struct Node *ptr=start;
for(int i=0;i<loc-1;i++)
{
ptr=ptr->next;
}
if(ptr->next==NULL)
{
new->next=NULL;
new->prev=ptr;
ptr->next=new;
end=new;
}
else
{
new->next=ptr->next;
new->prev=ptr;
ptr->next->prev=new;
ptr->next=new;
}
}
}
}
从头开始显示
void display_start(struct Node *temp)
{
struct Node *ptr=NULL;
for(ptr=temp;ptr->next!=NULL;ptr=ptr->next)
{
printf("%dt",ptr->data);
}
printf("%d",ptr->data);
}
从末端显示
void display_end(struct Node *temp2)
{
struct Node *ptr=NULL;
for(ptr=temp2;ptr->prev!=NULL;ptr=ptr->prev)
{
printf("%dt",ptr->data);
}
printf("%d",ptr->data);
}
主要功能
int main(void) {
// your code goes here
struct Node* head=NULL;
struct Node* tail=NULL;
push(head,tail,1,1);
push(head,tail,2,2);
push(head,tail,3,2);
push(head,tail,4,3);
push(head,tail,5,5);
push(head,tail,6,4);
printf("From Start: ");
display_start(head);
printf("From End: ");
display_end(tail);
return 0;
}
一个编译器显示垃圾值,另一个编译器显示分段错误
据我所知,显示列表时出现错误。
display_start()
不打印列表的一个可能原因是,您已将head
传递给push()
函数,该函数在 C 中被视为按值调用。因此,无论您在函数中使用head
进行push()
修改都不会main()
函数中产生影响,列表仍将为空。
与其只传递head
到push()
函数,不如传递head
的地址,同样适用于tail
。
例如
push(&head,&tail,1,1);
并在push()
功能中进行相应的更改。
void push(struct Node **start,struct Node **end,int x,int loc) {
/* Do changes here */
}
还要使用像gcc -Wall test.c
这样的标志编译程序-Wall
不要忽略警告,解决它们。最好通过使用-Wstrict-prototypes -Werror
进行编译将所有警告视为错误,以便减少出现错误的可能性。例如
gcc -Wall -Wstrict-prototypes -Werror test.c
最后学习如何调试一个小代码 https://ericlippert.com/2014/03/05/how-to-debug-small-programs/