首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

初学求指导…这个顺序表插入如何用main调用?main

2013-07-04 
初学求指导……这个顺序表插入怎么用main调用?main#include iostreamusing namespace stdtypedef struct{

初学求指导……这个顺序表插入怎么用main调用?main
#include <iostream>
using namespace std;
typedef struct
{
int data[10];
int length;
}Sqlist;

int LocateElem(Sqlist L,int x)
{
int i;
for(i=1;i<=L.length;++i)
{
return i;
}
return i;
}
int insert(Sqlist &L,int x)
{
int i,p;
p=LocateElem(L,x);
for(i=L.length;i>=p;--i)
{
L.data[i+1]=L.data[i];
}
L.data[p]=x;
++(L.length);
return 0;
}
int main()
{
#include <iostream>
using namespace std;
typedef struct
{
int data[10];
int length;
}Sqlist;

int LocateElem(Sqlist L,int x)
{
int i;
for(i=1;i<=L.length;++i)
{
return i;
}
return i;
}
int insert(Sqlist &L,int x)
{
int i,p;
p=LocateElem(L,x);
for(i=L.length;i>=p;--i)
{
L.data[i+1]=L.data[i];
}
L.data[p]=x;
++(L.length);
return 0;
}
int main()
{
int x,i;
Sqlist L;
      ?????????


return 0;
}


return 0; 数据结构?C++??main函数 数据结构 C++ main函数
[解决办法]
楼主的LocateElem函数写的好像有点问题,LocateElem函数中的x在函数体中没有用到,最后return的是L.length,线性表的插入应该这样写

#include<stdio.h>
#include<stdlib.h>
typedef struct//顺序表的类型定义
{
int data[10];//数据元素
int length;//顺序表的长度
}SeqList;
SeqList SeqListInsert(SeqList x,int y,int z)// 插入元素函数,假设在y位置上插入元素z
{
int i;
if(x.length==10)//最好加上这个判断,否则会造成数据溢出
{
printf("顺序表已满,无法插入元素\n");
exit(0);
}
else if(y<0
[解决办法]
y>x.length)//最好加上这个判断,否则造成插入失败
{
printf("插入位置出错\n");
exit(0);
}
else if(y==x.length)
{
x.data[y]=z;
x.length++;
return x;
}
else
{
for(i=x.length-1;i>=y;i--)
x.data[i+1]=x.data[i];
x.data[y]=z;
x.length++;
return x;
}
}
int main()
{
SeqList L;//假设L上有4个元素,0、1、2、3,分别位于a[0],a[1],a[2],a[3]
int i;
L.data[0]=0;
L.data[1]=1;
L.data[2]=2;
L.data[3]=3;
L.length=4;
L=SeqListInsert(L,1,10);//在下标为1的位置插入元素10
for(i=0;i<L.length;i++)//遍历线性表
{
printf("%d ",L.data[i]);
}
return 0;
}

[解决办法]
楼主上论坛求助问题,但是粘贴代码太草率了。同一份代码粘贴了两次。
然后,楼主自己写完代码后,可以自己先在脑子里虚拟运行一个各个函数,就知道哪里出现了逻辑问题。
比如,楼主写的LocateElem函数,根本没有用到第二个参数x,当L.length等于0时,for循环比较表达式不城里,因此未执行循环,执行for循环外面的return i,此时i已赋值为1,因此返回1。当L.Length >=1时,for循环比较表达式成立,因此执行for循环内部的return i,此时i依然为1,因此还是返回1.因此不管LocateElem函数始终返回1.
第二个问题:LocateElem的第一个参数不传引用,Sqlist是一个结构体,这里的复制成本就很高了。


第三个问题:就算假定insert始终插入到下标1的位置处,当L.length==9时,L.data[i+1]就尝试给下标10的位置赋值了,数组越界了。

热点排行