| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 330 人关注过本帖
标题:求大神啊!!!为什么内存不能为read,初步判断为deletesl()函数错误,但 ...
只看楼主 加入收藏
koko_2012
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2012-3-11
结帖率:100%
收藏
已结贴  问题点数:13 回复次数:5 
求大神啊!!!为什么内存不能为read,初步判断为deletesl()函数错误,但为什么错?
有序的一组整数,1-2-2-3-4-6-6
设计单链表,分别编写函数实现以下操作:
初始化链表。
添加上述一组数(结点),生成该链表。
统计该链表的长度。
在表中查找数据为3和7的结点,并返回其位置(若找不到返回 -1)。
删除中间重复结点,使链表变为 1-2-3-4-6。
显示经B,E操作后,链表的状况。


#define MAXNUM 100

#include "stdlib.h"
#include "stdio.h"


typedef struct node
{
    int data;
    struct node *next;


}node;






node *initiatesl(node *h)
{
    h->next=NULL;
    return (h);

}

node* creatlist(node *h)
{
    node *p,*s;
    int j=0;
    int    x[MAXNUM]={1,2,2,3,4,6,6,-1};
    int *p_x=x;

    h=(node*)malloc(sizeof(node));
    h->next=NULL;

    while(*p_x!=-1)
    {
        s=(node*)malloc(sizeof(node));
        s->data=*p_x;
        if(h->next==NULL)
        {
            h->next=s;


        }
        else
        {
            p->next=s;


        }
        p=s;
        p_x++;


    }
    p->next=NULL;
    return (h);




}

int length(node *h)
{
    node *p=h;
    int listlength=0;
    while(p->next!=NULL)
    {
        listlength++;
        p=p->next;


    }
    return (listlength);



}


int search(node *h,int i)
{
    node *p=h;
    int k=0,j=1;
    while(p->next!=NULL)
    {
        if(p->data==i)
        {
            k=j;

            return (k);


        }
        else
        {
            j++;
            p=p->next;



        }


    }
    if(p->next==NULL)
    {
        return (-1);


    }
    return (k);


}


void deletesl(node *h)
{
    node *p=h,*q,*s;
    while(p->next!=NULL)
    {
        if(p->data==p->next->data)
        {
            q=p->next;
            s=p->next->next;
            p->next=s;
            free(q);



        }
        p=p->next;


    }

}





void print(node *h)
{
     node *q;
     q=h->next;
     if(h!=NULL)
      {
        printf("h->");
        while(q!=NULL)
        {
            printf("%d->",q->data);
            q=q->next;
        }
        printf("NULL\n");


      }
}


int main()
{

    node *h;
    int listlength=0;
    int i=0;
    h=(node*)malloc(sizeof(node));
    if(!h)
    {
        printf("Memory out !\n");
        exit (0);

    }
    h=initiatesl(h);
    h=creatlist(h);
    listlength=length(h);

    print(h);
    printf("The list's length is %d\n",listlength);
    i=3;
    printf("search %d: %d\n",i,search(h,i));
    i=7;
    printf("search %d: %d\n",i,search(h,i));
    deletesl(h);
    print(h);
    return 0;

}

[ 本帖最后由 koko_2012 于 2012-3-27 23:00 编辑 ]
搜索更多相关主题的帖子: next include return 
2012-03-27 22:50
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:13 
回复 楼主 koko_2012
没电脑,手机上看的,觉得应该在free(q)后面加continue,没运行过,你先试试
void deletesl(node *h)
{
    node *p=h,*q,*s;
    while(p->next!=NULL)
    {
        if(p->data==p->next->data)
        {
            q=p->next;
            s=p->next->next;
            p->next=s;
            free(q);
            continue;  //加上这句试试
        }
        p=p->next;
    }
}

总有那身价贱的人给作业贴回复完整的代码
2012-03-28 06:57
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
另外代码有内存泄漏,在main函数一开始就为h分配了一块内存,在 creatlist函数里面又重新为头结点分配内存,那么main函数里分配的内存就丢了,找不到了

总有那身价贱的人给作业贴回复完整的代码
2012-03-28 07:02
koko_2012
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2012-3-11
收藏
得分:0 
回复 3楼 embed_xuel
1.但是我把createsl()中的h=(node*)malloc(sizeof(node));h->next=NULL;删除,只在main()中分配头结点 还是出现内存不能为read
2.或者我把main()函数中的
        h=(node*)malloc(sizeof(node));
    if(!h)
    {
        printf("Memory out !\n");
        exit (0);

    }
删除 ,在creatlist()中分配还是不行,


求指导!!!
2012-03-28 22:00
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 4楼 koko_2012
没看见二楼吗?

总有那身价贱的人给作业贴回复完整的代码
2012-03-28 22:06
koko_2012
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2012-3-11
收藏
得分:0 
明白了,多谢!!!
2012-03-28 22:34
快速回复:求大神啊!!!为什么内存不能为read,初步判断为deletesl()函数错误 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032330 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved