为什么debug之后总说我少写了“;”呢??
问题出现在主函数里~~~/*2.25 假设以两个元素依值递增有序排列的线性表A和B分别表示两个集合
(即同一表中的元素值各不相同),现要求另辟空间构成一个线性表C,
其元素为A和B中元素的交集,且表C中的元素也依值递增有序排列。
试对顺序表编写求C的算法。 */
#include <stdlib.h>
#include <stdio.h>
#include <iostream.h>
#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量
#define LISTINCREMENT 10 //线性表存储空间的分配量
#define Na 10; //线性表A存储元素个数
#define Nb 5; //线性表B存储元素个数
typedef int ElemType;
typedef struct
{
ElemType *elem; //存储空间基址
int length; //当前长度
int listsize; //当前分配的存储容量
}SqList;
void InitList_Sq(SqList &L) //构造顺序线性表
{
L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem)
exit(0);
L.length=0;
L.listsize=LIST_INIT_SIZE;
}
void ListInsert_Sq(SqList &L,int i,ElemType e)
//在顺序线性表L中第i个位置之前插入新的元素e
//i的合法值为1<=i<=ListLength_Sq(L)+1
{
int *newbase;
if(i<1||i>L.length) //i值不合法
exit(0);
if(L.length==L.listsize) //当前存储空间已满,增加分配
{
newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase)
exit(-2); //存储分配失败
L.elem=newbase; //新基址
L.listsize+=LISTINCREMENT; //增加存储容量
}
ElemType *q,*p;
q=&L.elem[i-1];
for(*p=L.elem[L.length-1];p>=q;--p)
*(p+1)=*p; //插入位置之后的元素右移
*q=e; //插入e
++L.length; //表长+1
}
void ListCreat_Sq(SqList &L,int n)
//逆序输入n个元素的值,建立顺序型线性表L
{
L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
L.length=L.length+sizeof(ElemType)*n;
int i;
for(i=0;i<=n;i++)
{
ElemType e;
printf("请逆序输入要插入值:\n");
scanf("%d",&e);
L.elem[i]=e;
}
}
void visit(ElemType c) //输出元素C
{
printf("%d\t",c);
}
void ListTraverse_Sq(SqList L)
//线性表L已存在,依次对L的每个数据元素调用函数visit(),一旦visit()失败,则操作失败
{
int i;
for(i=0;i<L.length;i++)
visit(L.elem[i]);
printf("\n");
}
void Similar_Sq(SqList La,SqList Lb,SqList &Lc) //求交集
{
int i,j,k;
i=0;
j=0;
k=0;
ElemType e;
if(La.length>=Lb.length)
Lc.length=La.length;
else
Lc.length=Lb.length;
while(i<La.length&&j<Lb.length)
{
if(La.elem[i]==Lb.elem[j])
{
e=La.elem[i];
Lc.elem[k]=e;
k++;
i++;
j++;
}
if(La.elem[i]<Lb.elem[j])
{
i++;
continue;
}
if(La.elem[i]>Lb.elem[j])
{
j++;
continue;
}
}
}
void main()
{
SqList La,Lb,Lc;
InitList_Sq(La);
InitList_Sq(Lb);
InitList_Sq(Lc);
printf("线性表A:\n");
ListCreat_Sq(La,Na); //创建线性表
printf("线性表B:\n");
ListCreat_Sq(Lb,Nb);
Similar_Sq(La,Lb,Lc); //求交集
printf("Lc为:\n");
ListTraverse_Sq(Lc);
}