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

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

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


#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日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效