| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 888 人关注过本帖
标题:顺序表 结构体(动态数组,尾元下标) 回传方式 引用
只看楼主 加入收藏
krisxj
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-7-8
结帖率:0
收藏
已结贴  问题点数:20 回复次数:4 
顺序表 结构体(动态数组,尾元下标) 回传方式 引用
希望会的人可以给个参考~~
搜索更多相关主题的帖子: 结构体 顺序 动态 回传 
2010-07-08 15:05
zisefengye
Rank: 5Rank: 5
等 级:职业侠客
帖 子:167
专家分:386
注 册:2010-6-27
收藏
得分:20 
template<class T, int max>
struct MyData   //结构体,可以动态给定数组的类型和长度
{
    size_t len;
    T data[max];
};
int main(int argc, char **argv)
{
    MyData<int, 100> seqlist = {sizeof(MyData<int, 100>)};
    return 0;
}
2010-07-08 18:52
krisxj
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-7-8
收藏
得分:0 
回复 2楼 zisefengye
有没有  类似这种的   #include <iostream>
using namespace std;
#include <stdlib.h>
#define datatype char
const  Init_n=3,inc_n=2;
typedef struct{
    int n,max;
    datatype *a;
}list;
list *Init(){/*初始化*/
    list *L=(list*)malloc(sizeof list);
    L->a=(datatype*)malloc(Init*sizeof(datatype));
    if(!L->a){cout<<"内存不足!";return 0;}
    L->max=Init_n-1;    L->n=-1;    return L;/*成功,置空表*/
}/*调用格式为:list *L=Init();*/
void Out(list *L){/*输出*/
    int i;    cout<<"(";
    if(L->n>-1)cout<<"%d"<<L->a[0];/*输出首元*/
    for(i=1;i<=L->n;i++)
        cout<<",%d"<<L->a[i];/*输出其它元素*/
    cout<<")";
}/*输出形式为:(a1,a2,…,an)*/
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;/*插入x,成功*/
}
int Del(list *L,int i){/*删除*/
    int j;
    if(i<1||i>L->n+1){
        printf("无此插入位置!"); 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;/*失败,返回约定值*/
}
void Replace(list *L,int i,datatype x){//替换
    int j,n;
    if(!L->n){cout<<"表空!";exit(0);}
    while(L->a&&i>j){
        for(j=0;j<=n;j++)
        L->a[i-1]=x;//替换
    }
}
int Length(list *L){//求表长
    int i=0;
    if(!L->n)return 0;
    while(L->n>0&&L->max<=3){
        i++;
        if(L->max>3)i+=inc_n;
        return i;
    }
}

datatype Get(list *L,int i){//取元素
    int j,n;
    datatype k;
    if(!L->n){cout<<"表空!";exit(0);}
    while(L->n&&j<i){
        for(j=0;j<=n+1;j++)
        k=L->a[i-1];
        return k;
    }
}
void Clear(list *L){//清空
    if(!L->n){cout<<"表空!";exit(0);}
    else Clear(L);
}
void main(){/*测试*/
    list *L=Init();
    if(!L)return;
    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\n值为2的元素序号为:%d"<<Location(L,2);
    cout<<"\n值为3的元素序号为:%d"<<Location(L,3);
    cout<<"\n\n用删除删空表:";
    if(!Del(L,2)||!Del(L,2)||!Del(L,1))return;
    cout<<"\nL=";    Out(L);
    cout<<"\n\n测扩充:";
    Ins(L,1,1);    Ins(L,1,2);    Ins(L,1,3);
    Ins(L,1,4);    Ins(L,1,5);    Ins(L,1,6);
    cout<<"\nL=";    Out(L);    cout<<"\n";
    Replace(L,1,2);       Length(L);
    Clear(L);   
    cout<<endl;

2010-07-08 19:26
zisefengye
Rank: 5Rank: 5
等 级:职业侠客
帖 子:167
专家分:386
注 册:2010-6-27
收藏
得分:0 
首先,楼主你自己要做什么,然后决定用什么方法做。假如说你有现成的例子,何不自己先做做看。一切都先从模仿开始。顺序表的插入删除,尤其是在中间位置,要注意下标的位置,要考虑其他元素位置的改变。还有用list *L=(list*)malloc(sizeof(list))就可以了,不必再为结构体内部元素再次分配内存。
2010-07-08 20:04
krisxj
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-7-8
收藏
得分:0 
回复 4楼 zisefengye
是我同学做的  和我的差不多 但是回传方式 不对   还有就是下标的问题  我都不太懂 所以才找人问的   
你可以帮我改改吗??
  
2010-07-08 20:39
快速回复:顺序表 结构体(动态数组,尾元下标) 回传方式 引用
数据加载中...
 
   



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

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