真是苺良鑫呀 2021-09-30 12:37 采纳率: 92.3%
浏览 39
已结题

怎么我的输出结果总是少一个数?改好久还是不行

题目:用顺序表求两集合的交集


#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
#define error 0
#define ok 1
typedef int status;

#define listinitsize 100
#define listincrement 10
typedef char elemtype;
typedef struct{
    elemtype *elem;
    int length;
    int listsize;
}sqlist ;

status initlist(sqlist &l)//构造一个空的线性表L 
{
    l.elem=(elemtype *)malloc(listinitsize*sizeof(elemtype));
    if(!l.elem) exit(error);//存储分配失败 
    l.length=0;
    l.listsize=listinitsize;//初始存储容量 
    return ok;
}

//顺序表实验4个辅助函数:
status inputlist(sqlist &l)//顺序表输入
{ int i,n;
  //printf("please input the length of the sqlist:");
  scanf("%d",&n);
  l.length=n;
  //printf("please input the data of the sqlist:");
  for (i=0;i<=l.length-1;i++) scanf("%d",&l.elem[i]);
  return ok;
}

status  listtraverse(sqlist l)//顺序表输出
{ int i;
  printf("the length of the sqlist:");
  printf("%d\n",l.length);
  printf("the data of the sqlist:");
  for (i=0;i<=l.length-1;i++) printf("%d ",l.elem[i]);
  printf("\n");
  return ok;
}

status destroylist(sqlist &l)//顺序表撤销
 { free(l.elem);
   l.length=0;
   l.listsize=0;
   return ok;
 }

status clearlist(sqlist &l)//顺序表重置
 { 
   l.length=0;
   return ok;
 }
 
 int locateelem(sqlist l,elemtype e)//判定 
 {   int a;
     for(int i=0;i<l.length;i++)
     {
         if(l.elem[i]==e)
        return i+1;
         //else cout<<"error"<<endl;
        
     } 
      return error;
 }
/*
 {
     for(int i=1;i<listlength(la);i++)
     {
         getelem(la,i,e);
         if(locateelem(lb,e)!=0)
         insertlist(lc,listlength(lc)+1,e);
     }
 }
 */
 status  getelem(sqlist l,int i, elemtype &e)
 {
     if(i<1||i>l.length+1) return error;
     else 
     e=l.elem[i-1]; 
    return ok; 
 }
  status listinsert(sqlist &l,int i,elemtype e) 
 {
     elemtype *newbase,*q,*p;
     if(i<1||i>l.length+1) return error;
     if(l.length>=l.listsize)
     {
         newbase=(elemtype*)realloc(l.elem,(l.listsize+listincrement)*sizeof(elemtype));
         if(!newbase) exit(error);
         l.elem=newbase;
         l.listsize+=listincrement;
     }
     q=&(l.elem[i-1]);
     for(p=&(l.elem[l.length-1]);p>=q;--p)  *(p+1) =*p;
     *q=e;
     ++l.length;
     return ok;
} 
 int main()
{
    sqlist la,lb,lc;
    initlist(la);
    inputlist(la);
    initlist(lb);
    inputlist(lb);
    initlist(lc);
    elemtype e;
    for(int i=1;i<la.length;i++)
     {
         getelem(la,i,e);
         //if(locateelem(la,e)==0)
         listinsert(lc,lc.length+1,e);
     }
    listtraverse(lc);
    destroylist(la);
    destroylist(lb);
    destroylist(lc);
    return 0;
}

img

  • 写回答

3条回答 默认 最新

  • 真是苺良鑫呀 2021-09-30 21:45
    关注

    我自己改过来了,这个是正确的

    
        for(int i=1;i<=la.length;i++)
         {
             getelem(la,i,e);
             if(locateelem(lb,e)!=0)//        if(locateelem(lb,e)!=0)
             listinsert(lc,lc.length+1,e);
         }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 10月9日
  • 已采纳回答 10月1日
  • 创建了问题 9月30日

悬赏问题

  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100