注册 登录
编程论坛 数据结构与算法

有关单链表的销毁操作,有点问题,求帮助?

zc1992312 发布于 2013-10-11 23:06, 673 次点击
#include <stdio.h>
#include <stdlib.h>

#define TURE 1
#define FALSE 0
#define Max 20
typedef struct                    
{
     float coef;                    /*系数*/
    int expn;                     /*指数*/
}ElemType;

typedef struct LNode                 
{
    ElemType data;                    
    struct LNode *pNext;         
}LNode, *Ploynomial;

int InitList(Ploynomial pList)
{
     pList = (Ploynomial ) malloc (sizeof (LNode));                /*创造头节点*/
    pList -> pNext = NULL;
    pList -> data.coef = 0.0;
    pList -> data.expn = 0;
    return TURE;
}

int DestroyList(Ploynomial pList)
{
     Ploynomial p = pList, q = p -> pNext;
    while (q != NULL)
    {
           free(p);
          p = q;
          q = p -> pNext;      
    }
    free(p);     
    return TURE;
}

main()
{
       Ploynomial List;
       printf ("...\n");
      InitList(List);
      DestroyList(List);
      
      system ("pause");      
}
运行结构。。
多项式运行环境.exe已停止工作
4 回复
#2
木头心2013-10-11 23:36
程序代码:
#include <stdio.h>
#include <stdlib.h>

#define TURE 1
#define FALSE 0
#define Max 20
typedef struct                    
{
     float coef;                    /*系数*/
    int expn;                     /*指数*/
}ElemType;

typedef struct LNode                 
{
    ElemType data;                    
    struct LNode *pNext;         
}LNode, *Ploynomial;

int InitList(Ploynomial &pList)//加& pList在调用时才会在函数中变化,发生改变
{
     pList = (Ploynomial ) malloc (sizeof (LNode));                /*创造头节点*/
    pList -> pNext = NULL;
    pList -> data.coef = 0.0;
    pList -> data.expn = 0;
    return TURE;
}

int DestroyList(Ploynomial &pList)//这里也一样
{
     Ploynomial p = pList, q = p -> pNext;
    while (q != NULL)
    {
          free(p);
          p = q;
          q = p -> pNext;      
    }
    free(p);     
    return TURE;
}

int main()//
{
       Ploynomial List;
       printf ("...\n");
      InitList(List);
      DestroyList(List);
      
      system ("pause");      
      return 0;//
}
//你的里面也没存数,只有一个表头。我是这样想的,你看看吧。欢迎批评
#3
zc19923122013-10-11 23:43
回复 2楼 木头心
Ploynomial pList   就相当于 LNode * pList吧!!
  那你在给pList 前面加个&  是不是双重指针了  ?
#4
yuccn2013-10-12 10:10
回复 3楼 zc1992312
指针的引用,主要是为了传递的是指针的地址而不是指针值
#5
zhaogay2013-10-13 00:07
程序代码:
#include <stdio.h>
#include <stdlib.h>
#define TURE 1
#define FALSE 0
#define Max 20
typedef struct                  

 {
      float coef;                    /*系数*/
     int expn;                     /*指数*/

 }ElemType;
typedef struct LNode               

 {
     ElemType data;                  
     struct LNode *pNext;      

 }LNode, *Ploynomial;
int InitList(Ploynomial pList)//要么外面分配好的内存传进来,要么里面分配好的内存用返回值把指针返回去,外面穿指针,里面再给它分配内存,毫无意义
{
     
     pList -> pNext = NULL;
     pList -> data.coef = 0.0;
     pList -> data.expn = 0;
     return TURE;

 }
int DestroyList(Ploynomial pList)//从最后一个结点开始往前释放
{
     Ploynomial p = pList, q = p -> pNext;
     while ( p != NULL)
     {
            if (p->pNext != NULL){
                     p = p->pNext;
                    continue;
            }
           free(p);
           p = pList;     
     }
   
     return TURE;

 }

int main()
{
        Ploynomial List;
        List = (Ploynomial ) malloc (sizeof (LNode));                /*创造头节点*/
        printf ("...\n");
       InitList(List);
       DestroyList(List);
     
       system ("pause");   
       return 0;
}
没有在机子上跑,小改下,不知道有木有错误,谅解!
1