我正在教自己C和Stephen Kochan编写的“Programming in C”一书,我在指针上进行了以下练习:
insertEntry
的函数,将新条目插入到链表中。让过程将指向要插入的列表条目的指针(本章定义的类型struct entry
)作为参数,并指向列表中元素的指针,之后将插入新条目。 / LI>
醇>
struct entry
结构定义如下:
struct entry
{
int x;
struct entry *ptr;
};
这是我的代码:
#include <stdio.h>
void insert_entry (struct entry *new_entry, struct entry *prev_entry);
struct entry
{
int x;
struct entry *ptr;
};
int main (void)
{
struct entry n1, n2, n3, new_entry;
struct entry *list_ptr = &n1;
n1.x = 1;
n1.ptr = &n2;
n2.x = 2;
n2.ptr = &n3;
n3.x = 4;
n3.ptr = (struct entry *) 0;
insert_entry (&new_entry, &n2);
// Loop to display the list to check if insert_entry worked
while ( list_ptr != (struct entry *) 0 ) {
printf ("%i\n", list_ptr->x);
list_ptr = list_ptr->ptr;
}
}
void insert_entry (struct entry *new_entry, struct entry *prev_entry)
{
new_entry->ptr = prev_entry->ptr;
prev_entry->ptr = new_entry;
// Assign a value to make it easier to check if the function worked
new_entry->x = 3;
}
此代码工作正常并完成工作。但接下来是练习#3:
我不知道如何继续。如果我设置另一个结构,我将无法在不更改insert_entry
函数的形式参数的情况下将其作为参数传递。但是我不能使用list_ptr
指针,因为如果我将它作为insert_entry
函数的第二个参数传递,则语句new_entry->ptr = prev_entry->ptr;
将没有意义。
关于这个关注练习#2的其他问题,但我无法找到任何关于此的内容。帮助将永远感激。提前谢谢。
*编辑:这就是我的代码现在的样子(感谢你/ ringzero):
#include <stdio.h>
void insert_entry (struct entry *new_entry, struct entry *prev_entry);
struct entry
{
int x;
struct entry *ptr;
};
int main (void)
{
struct entry n_start, n1, n2, n3, new_entry;
struct entry *list_ptr = &n_start;
n_start.ptr = &n1;
n1.x = 1;
n1.ptr = &n2;
n2.x = 2;
n2.ptr = &n3;
n3.x = 3;
n3.ptr = (struct entry *) 0;
insert_entry (&new_entry, &n_start);
// Loop to display the list to check if insert_entry worked
while ( list_ptr != (struct entry *) 0 ) {
printf ("%i\n", list_ptr->x);
list_ptr = list_ptr->ptr;
}
}
void insert_entry (struct entry *new_entry, struct entry *prev_entry)
{
new_entry->ptr = prev_entry->ptr;
prev_entry->ptr = new_entry;
// Assign a value to make it easier to check if the function worked
new_entry->x = 0;
}
n_start
应该是虚拟结构。代码的唯一问题是循环显示n_start.x
的值。如何才能使它不显示?
答案 0 :(得分:1)
作者Stephen Kochan有一个网站:classroomm.com
那里有一个论坛,其中有一小部分与他的书有关,#34; C编程,第3版。&#34;它包括奇数编号末尾练习的答案。你会发现它非常有用。
这里有来自该网站的相关信息,作为如何回答练习的轻微提示:
您可以通过设置&#34; dummy&#34;来解决此问题。结构变量 叫listHead,
例如:
struct entry listHead;
然后你可以通过指定listHead的下一个成员指向实际的第一个来设置它指向列表的头部 列表的输入:
listHead.next = &entry1;
现在要在列表的前面插入一个名为newEntry的新条目,您可以写:
insertEntry (&new_entry, &list_head);
我不会发布我为练习编写的代码 - 如果你自己与之争吵,你将会学到更多。