| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 425 人关注过本帖
标题:c数据结构课本上有关顺序表基础操作的代码运行不了,我提取了其中有问题的一 ...
只看楼主 加入收藏
sanjianfei
Rank: 2
等 级:论坛游民
帖 子:48
专家分:53
注 册:2012-2-21
结帖率:87.5%
收藏
已结贴  问题点数:30 回复次数:2 
c数据结构课本上有关顺序表基础操作的代码运行不了,我提取了其中有问题的一部分,怎么改啊
这部分代码只有初始化,空表情况下头插5个数,运行不了。
     (l.length在空表下等于0啊,那么还怎样运行p=&(l.elem[l.length-1])呢?)
帮忙把这段代码改正确
程序代码:
#include<stdio.h>
#include<malloc.h>
typedef int Status;
#define INITSIZE 10
#define INCREMENT 2
typedef int elementype;                              
struct sqlist
{
    elementype *elem;
    int length;
    int listsize;
};
void initlist(sqlist &l)
{
    l.elem=(elementype*)malloc(INITSIZE*sizeof(elementype));
    if(!l.elem)
    {
        printf("overflow");
    }
    else
    {
        l.length=0;
        l.listsize=INITSIZE;
        printf("ok\n");
    }
}
Status listinsert(sqlist l,int i,elementype e)
{
    elementype *p,*q,*newbase;
    if(i<1||i>l.length+1)
    {
        printf("位置非法");
        return(0);
    }
    if(l.length>=l.listsize)
    {
        newbase=(elementype*)realloc(l.elem,(l.listsize+INCREMENT)*sizeof(elementype));
        if(!newbase)
        {
        printf("内存扩展失败");
        return(0);
        }
        l.elem=newbase;
        l.listsize+=INCREMENT;
    }
    q=&(l.elem[i-1]);
    for(p=&(l.elem[l.length-1]);p>=q;--p)
    *(p+1)=*p;
    *q=e;
    ++l.length;
    printf("ok\n");
    return(1);
}
void main()
{
    Status i;
    int j,a;
    sqlist l;
    initlist(l);
    printf("初始L化后:l.elem=%u,l.length=%d,l.listsize=%d\n",l.elem,l.length,l.listsize);
    for(j=1;j<=5;j++)
    {
        printf("输入\n");
        scanf_s("%d",&a);
        i=listinsert(l,1,a);
    }
    printf("插入5个数之后\n");
    for(j=0;j<=4;j++)
        printf("*l.elem[%d]=%d\n",j,*(l.elem+j));
    printf("l.elem=%u,l.length=%d,l.listsize=%d\n",l.elem,l.length,l.listsize);
}


[ 本帖最后由 sanjianfei 于 2012-4-9 16:42 编辑 ]
搜索更多相关主题的帖子: 课本 数据 
2012-04-09 16:41
share32
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:214
专家分:663
注 册:2011-12-1
收藏
得分:30 
最大的问题是  函数之间你应该传递指针,你把结构体变量传过去,有什么用?

并且sqlist l;  这么做能运行吗?
struct sqlist l;才可以.

细节你再看吧.
2012-04-09 17:25
sanjianfei
Rank: 2
等 级:论坛游民
帖 子:48
专家分:53
注 册:2012-2-21
收藏
得分:0 
还是不对 各位大神帮忙啊
2012-04-10 15:00
快速回复:c数据结构课本上有关顺序表基础操作的代码运行不了,我提取了其中有问 ...
数据加载中...
 
   



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

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