| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 348 人关注过本帖
标题:数据结构
只看楼主 加入收藏
蔡梓锋
Rank: 4
等 级:业余侠客
帖 子:106
专家分:202
注 册:2013-4-20
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
数据结构
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
#define chushi 10
typedef struct list{
    int length;
    int listsize;
    int *elem;
}xin;
void chuangjian(xin *p)
{p->elem=(int *)malloc(chushi*sizeof(int));
    if(!p->elem)exit(0);
    p->length=0;
    p->listsize=chushi;
}
void fuzhi(xin *p,int i,int item)
{int *base,*q,*insertptr;
    if(i<1||i>p->length+1)exit(0);
    if(p->length>=p->listsize)
    {base=(int *)realloc(p->elem,(p->listsize+10)*sizeof(int));
        if(!base)exit(0);
        p->elem=base;
        p->listsize+=10;}
    insertptr=&(p->elem[i-1]);
    for(q=&(p->elem[p->length-1]);q>=insertptr;q--)
    *(q+1)=*q;
    *insertptr=item;
    p->length++;
   
   
   
   
    }


void main()
{int i;   
     xin k;
     chuangjian(&k);
     for(i=0;i<15;i++)
     fuzhi(&k,i+1,i+1);
     for(i=0;i<k.length;i++)
     printf("%d",k.elem[i]);


}
大神帮我解释一下for(q=&(p->elem[p->length-1]);q>=insertptr;q--),是不是第一次进入该函数时(即i=1),p->length-1是等于-1,这样没有出错吗?
这样说明数组的括号里面【可以使负数】。
搜索更多相关主题的帖子: include 
2013-07-28 21:38
蔡梓锋
Rank: 4
等 级:业余侠客
帖 子:106
专家分:202
注 册:2013-4-20
收藏
得分:0 
还有,貌似上面这两句循环是没有用的, for(q=&(p->elem[p->length-1]);q>=insertptr;q--)    *(q+1)=*q;
这里出现的目的是什么?

加油加油!
2013-07-28 21:44
鸿飞冥冥
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:48
专家分:124
注 册:2011-8-14
收藏
得分:20 
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
#define chushi 10

typedef struct list
{
    int length;
    int listsize;
    int *elem;
}xin;

void chuangjian(xin *p)
{
    p->elem=(int *)malloc(chushi*sizeof(int));
    if(!p->elem)exit(0);
    p->length=0;
    p->listsize=chushi;
}

void fuzhi(xin *p,int i,int item)
{
    int *base,*q,*insertptr;
    if(i<1||i>p->length+1)exit(0);
    if(p->length>=p->listsize)
    {
        base=(int *)realloc(p->elem,(p->listsize+10)*sizeof(int));
        if(!base)exit(0);
        p->elem=base;
        p->listsize+=10;
    }
    insertptr=&(p->elem[i-1]);
    q=&(p->elem[p->length-1]);
    printf ("*q = %d,q = %p\n",*q,q);
    for(;q>=insertptr;q--)
    {
        printf ("*q = %d,q = %p\n",*q,q);
        *(q+1)=*q;
    }
    *insertptr=item;
    p->length++;
}


int main(void)
{
     int i;   
     xin k;
     chuangjian(&k);
     for(i=0;i<15;i++)
     fuzhi(&k,1,i+1);
     for(i=0;i<k.length;i++)
     printf("%4d",k.elem[i]);
     printf ("\n");
     return 0;
}
把代码稍微改下就能找到答案了,,q=&(p->elem[p->length-1])第一次进循环时length=0,length-1=-1,但程序可以运行,,所以说数据下标是可以是负数的,,q=&(p->elem[p->length-1])也是有地址的..下面的for(q=&(p->elem[p->length-1]);q>=insertptr;q--)    *(q+1)=*q;不是没用,,而是你在主函数里都是顺序插入,,数组不用移动,,所以这两句就执行不到,,如果把 fuzhi(&k,i+1,i+1);改到fuzhi(&k,1,i+1);让它每次都在数组头部插入,,那每次都要把数组内的所有元素都后移,,那两句也就能用到了

Sickcat
2013-07-28 23:23
快速回复:数据结构
数据加载中...
 
   



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

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