| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 337 人关注过本帖
标题:求人帮我写个顺序表的复制操作
只看楼主 加入收藏
krisxj
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-7-8
结帖率:0
收藏
已结贴  问题点数:10 回复次数:1 
求人帮我写个顺序表的复制操作
#include <iostream>
using namespace std;
typedef int datatype;
const  Init_n=3,inc_n=2;
typedef struct{
    int n,max;//n为尾元下标
    datatype *a;
}list;
list Init(){/*初始化*/
    list *L=(list*)malloc(sizeof list);
    L->a=(datatype*)malloc(Init_n*sizeof(datatype));
    if(!L->a){cout<<"内存不足!";exit(0);}
    L->max=Init_n;    L->n=-1;    return *L;/*成功,置空表*/
}
void Out(list L){/*输出*/
    int i;    cout<<"(";
    if(L.n>-1)cout<<L.a[0];/*输出首元*/
    for(i=1;i<=L.n;i++)
        cout<<","<<L.a[i];/*输出其它元素*/
    cout<<")";
}
int Ins(list &L,int i,datatype x){/*插入*/
    int j;
    if(i<1||i>L.n+2){cout<<"位置错!";    return 0;}
    if(L.n+1==L.max){
        L.max+=inc_n;
        L.a=(datatype*)realloc(L.a,L.max*sizeof(datatype));
        if(!L.a){cout<<"内存不足!";return 0;}
    }
    for(j=L.n++;j>=i-1;j--)
        L.a[j+1]=L.a[j];/*向后移动数据*/
    L.a[i-1]=x;    return 1;
}
int Del(list &L,int i){/*删除*/
    int j;
    if(i<1||i>L.n+1){
        cout<<"无此插入位置!"; return 0;
    }
    for(j=i;j<=L.n;j++)
        L.a[j-1]=L.a[j];/*前移数据*/
    L.n--;    return 1;/*修正尾元下标,成功*/
}
int Location(list &L,datatype x){/*查找*/
    int i;
    for(i=0;i<=L.n;i++)
         if(L.a[i]==x)return i+1;/*成功,返回序号*/
    return 0;/*失败,返回约定值*/
}
int Length(list &L){//求表长
    int i,j=0;
    if(!L.n)return 0;
    for(i=-1;i<L.n;i++)if(L.a[i])j++;
    return j;
}
datatype Get(list &L,int i){//取元素
    int j;datatype k;
    while(L.n>-1&&j<i)
        for(j=0;j<=L.n;j++)k=L.a[i-1];
        return k;
}
void Replace(list &L,int i,datatype x){//替换
    int j;
    while(L.a&&j<i)
        for(j=0;j<=L.n;j++)L.a[i-1]=x;
}
void Clear(list &L){//清空
    if(!L.n){cout<<"表空!";return;}
    else L.n=-1;
}
void main(){/*测试*/
    list L=Init();
    cout<<"L=";    Out(L);
    cout<<"\n\n用插入生成顺序表:(1,5,3)";
    if(!Ins(L,1,5)||!Ins(L,1,1)||!Ins(L,3,3))return;
    cout<<"\nL=";    Out(L);
    cout<<"\n表长="<<Length(L);
    cout<<"\n\n值为2的元素序号为:"<<Location(L,2);
    cout<<"\n值为3的元素序号为:"<<Location(L,3);
    cout<<"\n\n取2的元素:"<<Get(L,2);
    Replace(L,2,2);
    cout<<"\n\n将第二个元素替换为2后:";
    cout<<"\nL=";    Out(L);
    cout<<"\n\n用删除删空表:";
    if(!Del(L,2)||!Del(L,2)||!Del(L,1))return;
    cout<<"\nL=";    Out(L);
    if(!Ins(L,1,5)||!Ins(L,1,1)||!Ins(L,3,3))return;
    if(!Ins(L,1,5)||!Ins(L,1,1)||!Ins(L,3,3))return;
    cout<<"\nL=";    Out(L);
    cout<<"\n表长="<<Length(L);
    Clear(L);
    cout<<"\nL=";    Out(L);
    cout<<endl;
}
以上为源程序    希望高手可以帮我加个 复制的基本操作 和输出~~
急用   多谢!!
搜索更多相关主题的帖子: 顺序 
2010-07-09 13:57
zisefengye
Rank: 5Rank: 5
等 级:职业侠客
帖 子:167
专家分:386
注 册:2010-6-27
收藏
得分:10 
复制可以这样考虑,初始化同样大小的顺序表,把元素逐个拷贝过去
比如:
List source;
List destination;
destination.n = source.n;
destination.max = source.max;
int len = source.n + 1;
for(int i = 0; i <= len; i++)
{
    destination.data[i] = source.data[i];
}
输出就更简单了
for(int i = 0; i <= len; i++)
{
    printf("%d\n", source.data[i]);
}
可能我的理解和你的有出入,仅供参考

2010-07-09 20:43
快速回复:求人帮我写个顺序表的复制操作
数据加载中...
 
   



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

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