| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 479 人关注过本帖
标题:求解释了 大家帮忙看看这个线性表 编译没问题 运行时结果不对
只看楼主 加入收藏
续写回忆
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2012-5-23
结帖率:25%
收藏
已结贴  问题点数:20 回复次数:6 
求解释了 大家帮忙看看这个线性表 编译没问题 运行时结果不对
#include<iostream>
using namespace std;
#define N  5
#define M  2


//顺序线性表的定义
typedef struct
{
    int *data;   //存放元素的首地址
    int length;  //存放的元素个数
    int listsize;  //总空总个数
}SqList;  //顺序线性表的名称

//顺序线性表的初始化
//如果成功,返回1,否则返回0
int Init_Sq(SqList &L)
{
    L.data = (int *)malloc(N*sizeof(int));
    if(L.data==NULL)  //空间分配失败   if(!L.data)
        return 0;
    L.length = 0;
    L.listsize = N;
    return 1;   
}

//插入
//在第i位置插入值e
int Insert_Sq(SqList &L,int e,int i)
{
    int j,*newbase;
    if(i<1 || i>L.length+1)  //判断位置是否合法
        return 0;
    if(L.length>=L.listsize)   //判断是否放满
    {
        newbase = (int *)realloc(L.data,(L.listsize+M)*sizeof(int));
        if(!newbase) return 0;
        L.data = newbase;
        L.listsize +=M;
    }
    //开始插入
    //先移动
    for(j=L.length-1;j>=i-1;j--)
        L.data[j+1] = L.data[j];
    L.data[i-1] = e;
    L.length++;
    return 1;
}
//输出所有元素
void Print_Sq(SqList L)
{
    int i;
    for(i=0;i<L.length;i++)
        cout<<L.data[i]<<' ';
    cout<<endl;
}

//删除
//删除第i位置的值,并将值用e保存
int Delete_Sq(SqList &L,int i,int &e)
{
    int j;
    int *p;
    if(i<1 || i>L.length)
        return 0;
    //开始删除
    //移动
    e = L.data[i-1];  //保存删除的值
    for(j=i;j<=L.length-1;j++)
        L.data[j-1] = L.data[j];
    L.length--;
    return 1;
}

//按值查找
//查找e所在的位置,如果找到,返回位置,如果不成功,返回0
int Search_Sq(SqList L,int e)
{
    int j;
    for(j=0;j<L.length;j++)
        if(L.data[j]==e)
            return j+1;
    return 0;
}

//获得某位置的值
//如果找到,用e保存值,并返回1,否则返回0
int Get_Sq(SqList L,int i,int &e)
{
    if(i<1 || i>L.length)
        return 0;
    e = L.data[i-1];
    return 1;
}
//修改第i位置的值,变成e
int Update_Sq(SqList &L,int i,int e)
{
    if(i<1 || i>L.length) return 0;
    L.data[i-1] = e;
}
//清空
void Clear_Sq(SqList &L)
{
    L.length = 0;
}
int main()
{
    SqList L;
    int n,e,i;
    char *op= NULL;
    op = new char[100];

    if(Init_Sq(L)==0)
        return 0; //程序结束
    cout<<"输入线性表的长度:"<<endl;
    cin>>n;
    cout<<"输入线性表内容:"<<endl;
    for(i=1;i<=n;i++)
    {
        cin>>e;
        L.data[i-1]=e;
    }
    L.length = n;
    cout<<"选择你要执行的操作 exit insert delete search clear get update print"<<endl;
    cin>>op;
    while(op!="exit")
    {
        if(strcmp(op,"insert")==0)  //如果是插入
        {
            cin>>i>>e;
            Insert_Sq(L,e,i);
        }
        if(strcmp(op,"delete")==0)  //如果是删除
        {
            cin>>i;
            Delete_Sq(L,i,e);
        }
        if(strcmp(op,"search")==0) //是查找search
        {
            cin>>e;
            i = Search_Sq(L,e);
            if(i==0)
                cout<<"NO element!"<<endl;
            else
                cout<<i<<endl;
        }
        if(strcmp(op,"clear")==0)  //是clear
            Clear_Sq(L);
        if(strcmp(op,"get")==0) //是get
        {
            cin>>i;
            if(Get_Sq(L,i,e)==0)
                cout<<"Error location!"<<endl;
            else
                cout<<e<<endl;
        }
        if(strcmp(op,"update")==0)
        {
            cin>>i>>e;
            Update_Sq(L,i,e);
        }
        if(strcmp(op,"print")==0)
            Print_Sq(L);

        cin>>op;
    }
   

    return 0;


}
  
编译都能通过的  也能运行 但结果不对 不知道哪里出问题了 对了 还有就是没有释放空间问题  这个对结果应该没影响的吧
搜索更多相关主题的帖子: 线性表 include 成功 return 
2012-10-29 12:25
爱闹的娃
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:265
专家分:975
注 册:2011-10-23
收藏
得分:10 
....对于这些程序来说....释放与否无关重要,如果是专业人士呢....铁定会释放....内存泄漏...懂吧?!!!
2012-10-29 12:50
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
回复 楼主 续写回忆
下次发帖的时候 可以把操作的过程和结果一并贴出来
2012-10-29 13:02
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
推不出来?
    while(op!="exit")
这样比较是不对的   


可以按照C++ 风格的  string op
或是继续保持c的字符串  strcmp()



2012-10-29 13:19
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:10 
    while(string(op)!="exit")



 
2012-10-29 13:20
续写回忆
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2012-5-23
收藏
得分:0 
回复 2楼 爱闹的娃
嗯嗯    初学的菜鸟而已了哈  
2012-10-29 20:17
续写回忆
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2012-5-23
收藏
得分:0 
回复 4楼 寒风中的细雨
嗯嗯 对 谢谢版主了哈  应该是 while (strcmp (op,"exit")!=0) 了 俺现在是初学菜鸟了 以后还望大侠们不吝赐教了
2012-10-29 20:36
快速回复:求解释了 大家帮忙看看这个线性表 编译没问题 运行时结果不对
数据加载中...
 
   



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

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