读书人

一路考研题目的疑惑

发布时间: 2013-01-07 10:02:25 作者: rapoo

一道考研题目的疑惑
题目如下:
设有一个包含10个结点的链表,头指针为head,s指针指向尾结点,结点类型为STU,每个结点包括学号、姓名和年龄。按要求写出相应的语句(不要求完整程序):
(1)定义节点类型STU;
(2)新开辟一个结点,使指针p指向该结点,输入结点的数据成员;
(3)把该结点插入链表的的尾部,释放指针p的指向;
(4)删除链表的第一个结点
(5)如果p1指向另一个新结点,把它插入到s所指结点和尾结点之间。编写函数,接收一个学号,查找链表,如果链表中的结点所包含的学号等于输入的学号吗,则将此结点删除。
我的疑问是:
1.第三步释放指针p的指向是什么意思啊?是用free函数释放吗?如果不是用free函数,那么到底题意是什么意思呢?
2.本人对free函数有点不明白。free函数执行后,原来内存中的数据还存在吗?free(p)之后,p还指向原内存吗?
哪位大侠帮小弟写个完整程序出来啊?
[解决办法]
把该结点插入链表的的尾部,释放指针p的指向;p->next=NULL;
[解决办法]
free之后,该指针指向的逻辑内存空间已经不属于你的进程了,再进行访问就是非法访问。
[解决办法]
1.struct STU
{
int id;
char *name;
int age;
STU *next;
};

2.STU *p = (STU*)malloc(sizeof(STU));
p->id = 0001;
p->name = "wang";
p->age = 20;
p->next = NULL;

3.s->next = p;p->next = NULL;

4.head->id = head->next->id;
strcpy(head->name,head->next->name);
head->age = head->next->age;
head->next = head->next->next;
free(head->next);

5.p1->next = s->next;
s->next = p1;
bool find(int id,STU *head)
{
if(head == NULL)
return false;
STU *t = head;
STU *q = head;
while(t)
{
q = t;
t = t->next;
if(t != NULL && t->id == id)
{
if(t->next != NULL)
{
t->id = t->next->id;
strcpy(t->name,t->next->name);
t->age = t->next->age;
t->next = t->next->next;
free(t->next);
}


else
{
q->next = NULL;
free(t);
t = q;
}
}
}
return true;
}

读书人网 >C语言

热点推荐