ListTraverse()函数和ListInsert()函数该怎么写?求大神指点。。

#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define MAXSIZE 110
typedef int ElemType;
typedef int Status;

typedef struct{
int elem[MAXSIZE];
int length;//当前长度
}SqList;
//================================================
void print(SqList *l)
{
int i;
for(i=0;i<l->length;i++)
{
printf("%d ",l->elem[i]);
}
printf("\n");
}
//================================================
Status ListLength(SqList La)
{
return La.length;
}
//================================================
Status getelem(SqList l,int i,ElemType *e)
{ if(i<1||i>l.length)
exit(ERROR);
*e=*(l.elem+i-1);
return OK;
}
//================================================
int LocateElem_Sq(SqList L,ElemType e,Status(*compare)(ElemType,ElemType))
{
//若找到则返回其在L中的为序,否则返回0
ElemType *p;
int i=1;
p=L.elem;
while(i<=L.length&&!(*compare)(*p++,e))
i++;
if(i<=L.length)
return i;
else
return 0;
}
//================================================
Status equal(ElemType a,ElemType b)
{if(a==b)
return TRUE;
else
return FALSE;
}
//================================================

//================================================
void Union(SqList *la,SqList lb)
{
int la_len,lb_len;
int i;
ElemType e;
la_len=ListLength(*la);
lb_len=ListLength(lb);
for(i=1;i<=lb_len;i++)
{
getelem(lb,i,&e);
if(!LocateElem_Sq(*la,e,equal))
ListInsert(la,++la_len,e);
}
}
//================================================
int main()
{
SqList la,lb;
int i,j;
printf("输入线性表la的元素个数:");
scanf("%d",&la.length);
printf("输入线性表la的元素:");
for(j=0;j<la.length;j++)
{
scanf("%d",&la.elem[j]);
}
printf("la=");
for(i=0;i<la.length;i++)
{
printf("%2d",la.elem[i]);
}
printf("\n");
//printf("la=");
//ListTraverse(la,print);
printf("输入线性表lb的元素个数:");
scanf("%d",&lb.length);
printf("输入线性表lb的元素:");
for(j=0;j<lb.length;j++)
{
scanf("%d",&lb.elem[j]);
}
printf("lb=");
for(i=0;i<lb.length;i++)
{
printf("%2d",lb.elem[i]);
}
printf("\n");
//printf("lb=");
//ListTraverse(lb,print);
Union(&la,lb);
printf("la= ");
ListTraverse(la,print);
}

insert是插入 这个很好理解

traverse是什么?遍历打印吗?貌似和print功能一样 看调用应该封装一下就可以了

如下

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define TRUE    1
#define FALSE   0
#define  OK     1
#define  ERROR  0
#define MAXSIZE 110
typedef int ElemType;
typedef  int Status;

typedef struct{
int elem[MAXSIZE];
int     length;//当前长度
}SqList;
//================================================
void print(SqList *l)
{
    int i;
    for(i=0;i<l->length;i++)
    {
        printf("%d ",l->elem[i]);             
    }
    printf("\n");
}
//================================================
Status ListLength(SqList La)
{
return La.length;
}
//================================================
Status getelem(SqList l,int i,ElemType *e)
{ if(i<1||i>l.length)
  exit(ERROR);
*e=*(l.elem+i-1);
return OK;
}
//================================================
int LocateElem_Sq(SqList L,ElemType e,Status(*compare)(ElemType,ElemType))
{
//若找到则返回其在L中的为序,否则返回0
ElemType *p;
    int i=1;
p=L.elem;
while(i<=L.length&&!(*compare)(*p++,e))
i++;
if(i<=L.length)
return i;
else
return 0;
}
//================================================
Status equal(ElemType a,ElemType b)
{if(a==b)
return TRUE;
else 
return FALSE;
}
//================================================
void ListInsert(SqList *l, int postion,ElemType e)
{
int i;
if(postion<1||postion>MAXSIZE) return;
for(i = l->length; i >= postion; i --)
l->elem[i] = l->elem[i-1];
l->elem[postion-1] = e;
l->length ++;
}
//================================================
void Union(SqList *la,SqList lb)
{
int la_len,lb_len;
int i;
ElemType e;
la_len=ListLength(*la);
lb_len=ListLength(lb);
for(i=1;i<=lb_len;i++)
{
getelem(lb,i,&e);
if(!LocateElem_Sq(*la,e,equal))
ListInsert(la,++la_len,e);
}
}
//================================================
void ListTraverse(SqList l,void (*print) (SqList *))
{
(*print)(&l);
}
//================================================
int main()
{
SqList la,lb;
int i,j;
printf("输入线性表la的元素个数:");
scanf("%d",&la.length);
printf("输入线性表la的元素:");
for(j=0;j<la.length;j++)
{
scanf("%d",&la.elem[j]);
}
printf("la=");
for(i=0;i<la.length;i++)
{
printf("%2d",la.elem[i]);
}
printf("\n");
printf("la=");
ListTraverse(la,print);
printf("输入线性表lb的元素个数:");
scanf("%d",&lb.length);
printf("输入线性表lb的元素:");
for(j=0;j<lb.length;j++)
{
scanf("%d",&lb.elem[j]);
}
printf("lb=");
for(i=0;i<lb.length;i++)
{
printf("%2d",lb.elem[i]);
}
printf("\n");
printf("lb=");
ListTraverse(lb,print);
Union(&la,lb);
printf("la= ");
ListTraverse(la,print);
return 0;
}
温馨提示:答案为网友推荐,仅供参考