首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一路考研题目的疑惑

2013-01-07 
一道考研题目的疑惑题目如下:设有一个包含10个结点的链表,头指针为head,s指针指向尾结点,结点类型为STU,每

一道考研题目的疑惑
题目如下:
设有一个包含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;
  }

热点排行