這個怎么總也運行不對啊,哭了。。
#include<stdio.h>
#include <stdlib.h>
typedef int ElemType;
#define LIST_INIT_SIZE 30 //線性表存盤空間的初始分配
#define LISTINCREMENT 10 //線性表存盤空間的分配增量
typedef struct
{
ElemType *elem; //存盤空間基址
int length; //當前長度
int listsize; //當前分配的存盤容量(以sizeof(ElemType)為單位)
} SqList;
/* 你的程式將嵌在這里 */
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
Status InitList_Sq(SqList &L)
{
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem)
return ERROR;//存盤分配失敗
L.length=0;//空表長度為0
L.listsize=LIST_INIT_SIZE;//初始存盤容量
return OK;
}
int ListLength_Sq(SqList L)
{
return L.length;
}
Status GetElem_Sq(SqList L,int i, ElemType &e)
{
if(i<1||i>L.length+1)
return ERROR;
e=L.elem[i-1];
return OK;
}
Status ListInsert_Sq(SqList &L,int i,ElemType e)
{
ElemType *p,*q,*newbase;
if(i<1||i>L.length+1)
return ERROR;//i不合法
if(L.length>=L.listsize)//當前存盤空間已滿
{
newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase)
exit(OVERFLOW); //存盤分配失敗
L.elem=newbase;//新基址
L.listsize+=LISTINCREMENT;
}
q=L.elem+i-1;//q為插入位置;
//if(L.length>=1)
for(p=L.elem+L.length-1; p>=q; --p) //p是最后一個位置
*(p+1)=*p;//元素后移
*q=e;//插入e
++L.length;//表長增加;
return OK;
}
Status Equal(ElemType x,ElemType y) //比較x與y是否相等
{
if(x==y)
return TRUE;
return FALSE;
}
int LocateElem_Sq(SqList L,ElemType e, Status (*compare)(ElemType,ElemType))//查找元素
{
ElemType *p;
int i=1;
p=L.elem;
if((i<=L.length)&&(*p++!=e))
++i;
if(i<=L.length)
return i;
else
return 0;
}
void union_Sq(SqList La,SqList Lb,SqList &Lc) //線性表La、Lb分別表示集合A、B,C=A∪B
{
InitList_Sq(Lc);
ElemType e;
int La_len,Lb_len,Lc_len=0,i;
La_len=ListLength_Sq(La);
Lb_len=ListLength_Sq(Lb);
for(i=1;i<=La_len;i++)
{
GetElem_Sq(La,i,e);
ListInsert_Sq(Lc,++Lc_len,e);
}
for(i=1;i<=Lb_len;i++)
{
GetElem_Sq(Lb,i,e);
if(LocateElem_Sq(Lc,e,Equal)==0)
ListInsert_Sq(Lc,++Lc_len,e);
}
}
int main( )
{
int i,len;
int m,n; //分別存放兩個集合初始長度
ElemType e;
SqList La,Lb,Lc;
scanf("%d%d",&m,&n);
InitList_Sq(La);
InitList_Sq(Lb); //建立兩個空集
for(i=1; i<=m; i++) //建立第一個集合
{
scanf("%d",&e);
ListInsert_Sq(La,i,e);
}
for(i=1; i<=n; i++) //建立第二個集合
{
scanf("%d",&e);
ListInsert_Sq(Lb,i,e);
}
union_Sq(La,Lb,Lc); //計算集合La、Lb的交集Lc
len=ListLength_Sq(Lc);
for(i=1; i<=len; i++) //輸出
{
GetElem_Sq(Lc,i,e);
printf("%4d",e);
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/18004.html
標籤:新手樂園
上一篇:求告知這是ctf什么離線解碼工具
