头文件:
c1.h (相关头文件及函数结果状态代码集合)
/* c1.h (程序名) */
#include<string.h>
#include<ctype.h>
#include<malloc.h> /* malloc()等 */
#include<limits.h> /* INT_MAX等 */
#include<stdio.h> /* EOF(=^Z或F6),NULL */
#include<stdlib.h> /* atoi() */
#include<io.h> /* eof() */
#include<math.h> /* floor(),ceil(),abs() */
#include<process.h> /* exit() */
/* 函数结果状态代码 */
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
/* #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行 */
typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */
typedef int Boolean; /* Boolean是布尔类型,其值是TRUE或FALSE */
c2-1.h (线性表的动态分配顺序存储结构)
/* c2-1.h 线性表的动态分配顺序存储结构 */
#define LIST_INIT_SIZE 10 /* 线性表存储空间的初始分配量 */
#define LISTINCREMENT 2 /* 线性表存储空间的分配增量 */
typedef struct
{
ElemType *elem; /* 存储空间基址 */
int length; /* 当前长度 */
int listsize; /* 当前分配的存储容量(以sizeof(ElemType)为单位) */
}SqList;
######################################################
主函数:
ALGO2-1.c
/* algo2-1.c 实现算法2.1的程序 */
#include"c1.h"
typedef int ElemType;
#include"c2-1.h" /* 采用线性表的动态分配顺序存储结构 */
#include"bo2-1.c" /* 可以使用bo2-1.c中的基本操作 */
Status equal(ElemType c1,ElemType c2)
{ /* 判断是否相等的函数,Union()用到 */
if(c1==c2)
return TRUE;
else
return FALSE;
}
void Union(SqList *La,SqList Lb) /* 算法2.1 */
{ /* 将所有在线性表Lb中但不在La中的数据元素插入到La中 */
ElemType e;
int La_len,Lb_len;
int i;
La_len=ListLength(*La); /* 求线性表的长度 */
Lb_len=ListLength(Lb);
for(i=1;i<=Lb_len;i++)
{
GetElem(Lb,i,&e); /* 取Lb中第i个数据元素赋给e */
if(!LocateElem(*La,e,equal)) /* La中不存在和e相同的元素,则插入之 */
ListInsert(La,++La_len,e);
}
}
void print(ElemType *c)
{
printf("%d ",*c);
}
void main()
{
SqList La,Lb;
Status i;
int j;
i=InitList(&La);
if(i==1) /* 创建空表La成功 */
for(j=1;j<=5;j++) /* 在表La中插入5个元素 */
i=ListInsert(&La,j,j);
printf("La= "); /* 输出表La的内容 */
ListTraverse(La,print);
InitList(&Lb); /* 也可不判断是否创建成功 */
for(j=1;j<=5;j++) /* 在表Lb中插入5个元素 */
i=ListInsert(&Lb,j,2*j);
printf("Lb= "); /* 输出表Lb的内容 */
ListTraverse(Lb,print);
Union(&La,Lb);
printf("new La= "); /* 输出新表La的内容 */
ListTraverse(La,print);
}
####################################################