| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1846 人关注过本帖
标题:数据结构中线性表的插入!
只看楼主 加入收藏
李亚宽
Rank: 1
等 级:新手上路
帖 子:13
专家分:4
注 册:2012-2-23
收藏
 问题点数:0 回复次数:11 
数据结构中线性表的插入!
#include<iostream.h>
#define DATATYPE1    int
#define MAXSIZE        100

typedef struct
{
    DATATYPE1 datas[MAXSIZE];
    int last;
    int len;
}SEQUENLIST;

int locate(SEQUENLIST *a, DATATYPE1 x)
{
    int k;
    k=1;
    while(k<=a->last&&a->datas[k-1]!=x)
        k++;
    if(k<=a->last)
        return k;
    else return 0;
}

int insert(SEQUENLIST *a, DATATYPE1 x, int i)
//将新元素x插入到顺序表a的第i个元素的前面
{
int k;
if(i<1||i>a->last||a->last>=MAXSIZE)
return 0;
else
{
    for(k=a->last;k>=i;k--)
        a->datas[k]=a->datas[k-1];
    a->datas[i-1]=x;
    a->last=a->last+1;
    return 1;
}
}

int unit(SEQUENLIST *la, SEQUENLIST *lb)
{
   
    int locate(SEQUENLIST *a, DATATYPE1 x);
    int insert(SEQUENLIST *a, DATATYPE1 x, int i);
    int i;
    for(i=1;i<=lb->last;i++)
        if(!locate(la,lb->datas[i-1]))
            insert(la,lb->datas[i-1],la->last+1);
        return 1;
}


void printSEQUENLIST(SEQUENLIST *a)
{
    int i;
    for(i=0;i<=10;i++)
    {
        cout<<a->datas[i]<<endl;
    }
}


int main()
{
    int i=0;
    SEQUENLIST sd;
    SEQUENLIST sd1;
    SEQUENLIST *t=&sd;
    SEQUENLIST *p=&sd1;
    t->len=8;
    t->last=t->len;
    p->len=8;
    p->last=t->len;

    t->datas[1]=4;
    t->datas[2]=7;
    t->datas[3]=8;
    t->datas[4]=3;
    t->datas[5]=5;

    p->datas[1]=10;
    p->datas[2]=9;
    p->datas[3]=8;
    p->datas[4]=3;
    p->datas[5]=5;

    unit(p,t);
   
   
    printSEQUENLIST(t);
    printSEQUENLIST(p);
    return 0;

}
能运行 可是主函数好像根本没有调用unit函数、、、

[ 本帖最后由 李亚宽 于 2012-3-8 19:25 编辑 ]
搜索更多相关主题的帖子: 数据 include return insert 
2012-03-08 12:14
非死亡!
Rank: 8Rank: 8
来 自:四川
等 级:蝙蝠侠
帖 子:179
专家分:760
注 册:2011-10-31
收藏
得分:0 
能加点注译吗? 我看了半天了  没完全看明白啊

能力 技巧
2012-03-08 12:54
李亚宽
Rank: 1
等 级:新手上路
帖 子:13
专家分:4
注 册:2012-2-23
收藏
得分:0 
回复 2楼 非死亡!
恩 那你看这个吧我又改了一些麻烦您再帮我看看
#include<iostream.h>
#define DATATYPE1    int
#define MAXSIZE        100
#define NULL        0

typedef struct
{
    DATATYPE1 datas[MAXSIZE];
    int last;
    int len;
}SEQUENLIST;

int locate(SEQUENLIST *a, DATATYPE1 x)//顺序表的定位函数
{
    int k;
    k=1;
    while(k<=a->last&&a->datas[k-1]!=x)
        k++;
    if(k<=a->last)
        return k;
    else return 0;
}

int insert(SEQUENLIST *a, DATATYPE1 x, int i)
//将新元素x插入到顺序表a的第i个元素的前面
{
int k;
if(i<1||i>a->last||a->last>=MAXSIZE)
return 0;
else
{
    for(k=a->last;k>=i;k--)
        a->datas[k]=a->datas[k-1];
    a->datas[i-1]=x;
    a->last=a->last+1;
    return 1;
}
}

SEQUENLIST unit(SEQUENLIST la, SEQUENLIST lb)//将所有在顺序表lb中存在而在顺序表la中不存在的数据插入到la表中;
{
   
    int locate(SEQUENLIST *a, DATATYPE1 x);
    int insert(SEQUENLIST *a, DATATYPE1 x, int i);
    int i;
    for(i=1;i<=lb.last;i++)
    {
        if(locate(&la,lb.datas[i-1]))
            break;
        else
        {
            insert(&la,lb.datas[i-1],la.last+1);
        }
        return la;
    }
}


void printSEQUENLIST(SEQUENLIST *a)//输出函数;
{
    int i;
    for(i=0;i<=10;i++)
    {
        cout<<a->datas[i]<<endl;
    }
}


int main()
{
    int i=0;
    SEQUENLIST sd;
    SEQUENLIST sd1;


    sd.datas[1]=4;//初始化的两个线性表;
    sd.datas[2]=7;
    sd.datas[3]=8;
    sd.datas[4]=3;
    sd.datas[5]=5;

    sd1.datas[1]=10;
    sd1.datas[2]=9;
    sd1.datas[3]=8;
    sd1.datas[4]=3;
    sd1.datas[5]=5;

    sd=unit(sd,sd1);
   
   
    printSEQUENLIST(&sd);

    return 0;

}
希望您能帮我分析分析
2012-03-08 13:07
雨的帝国
Rank: 2
等 级:论坛游民
帖 子:18
专家分:15
注 册:2011-5-16
收藏
得分:0 
经过大致的调试,发现了一些:
1、unit函数里面的int locate(SEQUENLIST *a, DATATYPE1 x);和int insert(SEQUENLIST *a, DATATYPE1 x, int i);可以不用声明的,因为这两个函数在这之前已经有了定义;
2、insert函数的功能有点问题,首先我说一下,我判断locate函数的大概功能是将一个的成员拿出与另外的对象所有成员进行比较,有相同的就返回真,没有就返回假。然后把这个数插进另外的对象里面。这个插入是用insert来完成的。不知道说对了没。现在来说一下这个insert函数的问题:
      insert里面的这条语句if(i<1||i>a->last||a->last>=MAXSIZE)就有问题,i是la.last+1等于9那么它必定大于1,同时他必定大于a->last,a->last>=MAXSIZE这个也一般是不成立的,所有会始终执行return 0;
怎么改就看你自己了!!!!!

求能人帮助一起学习C++       QQ:1635668923
2012-03-08 13:26
雨的帝国
Rank: 2
等 级:论坛游民
帖 子:18
专家分:15
注 册:2011-5-16
收藏
得分:0 
回复 楼主 李亚宽
求楼主回复啊!!!解答的怎么样啊!!!!给个回复呗!!!!

求能人帮助一起学习C++       QQ:1635668923
2012-03-08 13:41
李亚宽
Rank: 1
等 级:新手上路
帖 子:13
专家分:4
注 册:2012-2-23
收藏
得分:0 
回复 4楼 雨的帝国
呵呵 谢谢您的回答
首先第一您说的我理解;
第二中首先 你说的locate函数的功能是对的 不过返回的不是真和假而是对象的数据在线性表中的位置 还有那个insert函数
 if(i<1||i>a->last||a->last>=MAXSIZE)
return 0;
else
{
    for(k=a->last;k>=i;k--)
        a->datas[k]=a->datas[k-1];
    a->datas[i-1]=x;
    a->last=a->last+1;
    return 1;
}
中的if后面的条件如果成立返回的是0;如果不成立返回的是else后的语句;
您在好好看看  我们可以交流交流;
2012-03-08 13:57
雨的帝国
Rank: 2
等 级:论坛游民
帖 子:18
专家分:15
注 册:2011-5-16
收藏
得分:0 
回复 6楼 李亚宽
我大概猜出返回的是位置,可是int locate(SEQUENLIST *a, DATATYPE1 x)//顺序表的定位函数
{
    int k;
    k=1;
    while(k<=a->last&&a->datas[k-1]!=x)
        k++;
    if(k<=a->last)
        return k;
    else return 0;
}
返回之后没有接受这个返回值。而是if(locate(&la,lb.datas[i-1]))一个判断,所有我就理解为真和假,不知道有错否??
还有,insert里的if(i<1||i>a->last||a->last>=MAXSIZE)我是想说if()括号里的条件会永远都成立(原因我先前解释过了)!!!那么就会始终只执行return 0了。

求能人帮助一起学习C++       QQ:1635668923
2012-03-08 14:09
李亚宽
Rank: 1
等 级:新手上路
帖 子:13
专家分:4
注 册:2012-2-23
收藏
得分:0 
回复 7楼 雨的帝国
恩恩 朋友 说的很对 我再好好看看
2012-03-08 18:29
李亚宽
Rank: 1
等 级:新手上路
帖 子:13
专家分:4
注 册:2012-2-23
收藏
得分:0 
回复 7楼 雨的帝国
呵呵 谢谢哈 经过你的提示我总算做出来了
我也是c++爱好者 希望以后能多多交流
修改后的:
#include<iostream.h>
#define DATATYPE1    int
#define MAXSIZE        100

typedef struct
{
    DATATYPE1 datas[MAXSIZE];
    int last;
    int len;
}SEQUENLIST;



void init1(SEQUENLIST *l)
{
int i=0;
for(i=0;i<l->len;i++)
{
   l->datas[i]=86+i;
}
}
void init2(SEQUENLIST *l)
{
int i=0;
for(i=0;i<l->len;i++)
{
   l->datas[i]=90+i;
}
}
int locate(SEQUENLIST *a, DATATYPE1 x)
{
    int k;
    k=1;
    while(k<=a->last&&a->datas[k-1]!=x)
        k++;
    if(k<=a->last)
        return k;
    else return 0;
}

int insert(SEQUENLIST *a, DATATYPE1 x, int i)
//将新元素x插入到顺序表a的第i个元素的前面
{
int k;
{
    for(k=a->last;k>=i;k--)
        a->datas[k]=a->datas[k-1];
    a->datas[i-1]=x;
    a->last=a->last+1;
    return 1;
}
}
void unit(SEQUENLIST *la, SEQUENLIST *lb)
{
   
    int locate(SEQUENLIST *a, DATATYPE1 x);
    int insert(SEQUENLIST *a, DATATYPE1 x, int i);
    int i;
    for(i=1;i<=lb->last;i++)
        if(!locate(la,lb->datas[i-1]))
            insert(la,lb->datas[i-1],la->last+1);
}
void printSEQUENLIST(SEQUENLIST *a)
{
    int i;
    for(i=0;i<=11;i++)
    {
        cout<<a->datas[i]<<endl;
    }
}

int main()
{
    int i=0;
    SEQUENLIST sd;
    SEQUENLIST sd1;
    SEQUENLIST *t=&sd;
    SEQUENLIST *p=&sd1;
    t->len=8;
    t->last=t->len;
    p->len=8;
    p->last=t->len;


    init1(p);
    init2(t);
    //insert(t,10,5);
    //insert(p,10,5);

    unit(t,p);
   
   
    printSEQUENLIST(t);
    //printSEQUENLIST(p);
    return 0;

}
2012-03-08 19:00
雨的帝国
Rank: 2
等 级:论坛游民
帖 子:18
专家分:15
注 册:2011-5-16
收藏
得分:0 
回复 9楼 李亚宽
自己做出来最好了!!!我只是提示而已!!!!还有其实你可以用调试的功能!!!!一步步的来看或许会更加清楚!!!!我就是用调试发现的!!!!

求能人帮助一起学习C++       QQ:1635668923
2012-03-08 19:16
快速回复:数据结构中线性表的插入!
数据加载中...
 
   



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

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