| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 331 人关注过本帖
标题:动态顺序表的一些问题
只看楼主 加入收藏
一个孩子
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:356
专家分:954
注 册:2012-10-1
结帖率:96.77%
收藏
已结贴  问题点数:20 回复次数:4 
动态顺序表的一些问题
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define Maxsize 10
typedef int Elemtype;
typedef struct
{
    Elemtype *elem;
    int length;
    int listsize;
}Sqlist;


void initSqlist( Sqlist *L)
{
    L->elem=(int *)malloc(Maxsize * sizeof(int));
    if(!L->elem)
    {
        printf("Malloc error!\n");
        
    }
    L->length=0;
    L->listsize=Maxsize;
}
void insertSqlist(Sqlist *L,int i,Elemtype item)
{
    Elemtype *base,*p,*insertPtr;
    if(i<1||i>L->length)
    {
        printf("Error!\n");
   
    }
    if(L->length>=L->listsize)
    {
        base=(int *)realloc(L->elem,(L->listsize+10)*sizeof(int));
        L->elem=base;
        L->listsize=L->listsize+100;

    }
    insertPtr=L->elem+i-1;
    for(p=L->elem+L->length-1;p>=insertPtr;p--)
    {
        *(p+1)=*p;
    }
    *insertPtr=item;
    L->length++;
}

void DelElem(Sqlist *L,int i)
{
    Elemtype *delItem,*p;
    delItem=L->elem+i-1;
    p=L->elem+L->length-1;
    for(++delItem;delItem<=p;++delItem)
    {
         *(delItem-1)=*(delItem);
    }
    L->length--;

}
int main(void)
{
    Sqlist *L;
    int i;
    initSqlist(L);
    for(i=0;i<15;i++)
    {
        insertSqlist(L,i+1,i+1);
    }
    for(i=0;i<L->length;i++)
    {
        printf("%3d",L->elem[i]);
    }
    printf("\n");
    DelElem(L,5);
    printf("\nDelete the fifth number \n");
    for(i=0;i<L->length;i++)
    {
        printf("%3d",L->elem[i]);

    }
    printf("\n");
    return 0;
}


调了半天,还是调不出来,不知道哪里错了,没有编译错误,一运行就崩溃,那位高手赶紧露几手吧,急啊!!!
搜索更多相关主题的帖子: void 动态 include 
2012-10-09 19:07
爱闹的娃
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:265
专家分:975
注 册:2011-10-23
收藏
得分:10 
在主函数里面定义了一个结构体的指针,但是它并没有初始化,你给它开辟一个空间......
2012-10-09 19:53
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:10 
    Sqlist *L;
    int i;
    initSqlist(L);
这里只申请了4个字节的指针变量空间,并且没有初始化。但是函数里面却要针对指针指向的结构体操作,这样有问题吧,估计引发段错误。
声明一个结构体,然后传递结构体指针给函数。比如
Sqlist L;
initSqlist(&L);


[ 本帖最后由 pauljames 于 2012-10-9 20:52 编辑 ]

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2012-10-09 20:33
一个孩子
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:356
专家分:954
注 册:2012-10-1
收藏
得分:0 
谢谢了 ,这个错误已经改正,但是还有些许错误,希望能给以指正:

代码:#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define Maxsize 10
typedef int Elemtype;
typedef struct
{
    Elemtype *elem;
    int length;
    int listsize;
}Sqlist;


void initSqlist( Sqlist *L)
{
    L->elem=(int *)malloc(Maxsize * sizeof(int));
    if(!L->elem)
    {
        printf("Malloc error!\n");
        
    }
    L->length=0;
    L->listsize=Maxsize;
}
void insertSqlist(Sqlist *L,int i,Elemtype item)
{
    Elemtype *base,*p,*insertPtr;
    if(i<1||i>L->length)
    {
        printf("Error!\n");
    }
    if(L->length>=L->listsize)
    {
        base=(int *)realloc(L->elem,(L->listsize+10)*sizeof(int));
        L->elem=base;
        L->listsize=L->listsize+100;

    }
    insertPtr=L->elem+i-1;
    for(p=L->elem+L->length-1;p>=insertPtr;p--)
    {
        *(p+1)=*p;
    }
    *insertPtr=item;
    L->length++;
}

void DelElem(Sqlist *L,int i)
{
    Elemtype *delItem,*p;
    delItem=L->elem+i-1;
    p=L->elem+L->length-1;
    for(++delItem;delItem<=p;++delItem)
    {
         *(delItem-1)=*(delItem);
    }
    L->length--;

}
int main(void)
{
    Sqlist *L;
    L=(Sqlist *)malloc(sizeof(Sqlist));
    int i;
    initSqlist(L);
    for(i=0;i<15;i++)
    {
        insertSqlist(L,i+1,i+1);
    }
    for(i=0;i<L->length;i++)
    {
        printf("%3d",L->elem[i]);
    }
    printf("\n");
    DelElem(L,5);
    printf("\nDelete the fifth number \n");
    for(i=0;i<L->length;i++)
    {
        printf("%3d",L->elem[i]);

    }
    printf("\n");

    return 0;
}
错误结果:

图片附件: 游客没有浏览图片的权限,请 登录注册


我知道是插入函数出现了问题,但是看了好久还是看不出来,难道是只缘身在此山中?

重要的不是结果,是求一个结果的过程,哪怕千难万难,当你有想要的结果时,你已走的很远
2012-10-10 12:17
一个孩子
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:356
专家分:954
注 册:2012-10-1
收藏
得分:0 
好吧 我又错了 哎。。。

重要的不是结果,是求一个结果的过程,哪怕千难万难,当你有想要的结果时,你已走的很远
2012-10-10 14:12
快速回复:动态顺序表的一些问题
数据加载中...
 
   



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

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