链表实现集合实验报告
3.1.2
#define ElemType int
#define status int
3.1.3
//结构体
typedef struct Node
{
ElemType data;
struct Node *next;
}Node;
typedef struct Node* Linklist;
3.1.4 int LinkLocate_L (Linklist *L, int x)
//赋值
p = *L;
//循环找到满足条件的插入位置
while( p && j < i - 1 ){
p = p->next;
++j;
}
//如果不满足条件返回0
if( !p || j > i - 1 ){
return 0;
}
//将删除的位置以后的元素往前移一位
q = p->next;
p->next = q->next;
2.3
/*************************************
功能:查找集合中的元素
参数:需要查找的元素、指针头地址
返回值:无
*************************************/
int LinkLocate_L (Linklist *L, int x)
/*****************************************
功能:向集合中插入元素
参数:头地址、插入位置、插入元素
参数:1或0
*****************************************/
int ListInsert_L( Linklist *L, int i, ElemType e )
/********************************************
*e = q->data;
free(q);
return 1;
}
3.1.7 void CreateList_L(Linklist *L, int n)
/*****************************************
功能:创建链表集合
参数:集合长度
返回值:无
*****************************************/
功能:删除元素
参数:头地址、插入位置
返回值:1或0
********************************************/
status INlist( Linklist *L, int i, ElemType *e ){
Linklist p;//指针
Linklist q;//指针
int j = 0;//中间变量
for ( i=n; i > 0; --i ) {
p=(Linklist)malloc(sizeof(Node));
scanf("%d",&p->data);
p->next = (*L)->next;
(*L)->next=p;
}
//输出集合元素
printf( "\n" );
printf( "集合的元素:" );
q=first;
while (q && q->data !=x)
q=q->next;
if (!q) {
q=(Linklist)malloc(sizeof(Node));//申请节点内存将Lb中的元素放到La中
q->data = x;
q->next = (*La)->next;
for ( i=n; i > 0; --i ){
printf( "%d", p->data );
p = p->next;
}
}
3.1.8 void HHHGG( Linklist *L )
/**********************************
功能:输出集合的元素
参数:头结点地址
返回值:无
//申请内存
Linklist *La = (Linklist*)malloc(sizeof(Linklist));
Linklist *Lb = (Linklist*)malloc(sizeof(Linklist));
ElemType *e = (ElemType*)malloc(sizeof(ElemType));
/*************************************
功能:查找集合中的元素
参数:需要查找的元素、指针头地址
返回值:无
*************************************/
int LinkLocate_L (Linklist *L, int x)
{
int i; //中间变量
printf ("元素位置:i=%d\n",i);
}
}
3.1.5 int ListInsert_L( Linklist *L, int i, ElemType e )
/*****************************************
功能:向集合中插入元素
参数:头地址、插入位置、插入元素
功能:创建链表集合
参数:集合长度
返回值:无
*****************************************/
void CreateList_L(Linklist *L, int n)
/**********************************
功能:输出集合的元素
参数:头结点地址
ListInsert_L( Lb,1,7 );
printf( "插入后的结果:" );
HHHGG(Lb);
//交集
JJ( La, Lb );
//差集
CJ( La, Lb );
//判空集
PKJ( La );
//并集
BJ( La, Lb );
}
2.2
#define ElemType int
#define status int
//输入集合的元素
CreateList_L( Lb, n1 );
//查找
printf( "\n" );
printf( "查找结果:" );
LinkLocate_L( Lb, 3 );
//删除并输出
INlist( Lb,1,*e );
printf( "删除后的结果:" );
HHHGG(Lb);
//插入并输出
void JJ( Linklist *La, Linklist *Lb )
/****************************************
功能:集合的差集
参数:两个集合的头地址
返回值:无
****************************************/
void CJ( Linklist *La, Linklist *Lb )
返回值:无*******来自**************************/
void HHHGG( Linklist *L )
/******************************************
功能:集合的并集
参数:两个集合的头地址
返回值:无
******************************************/
线性表实现实验报告
班级:计算机2班学号:姓名:
1.
1.1
输入形式:整数
输入范围:整数集合长度不能超过1000
1.2
用空格分开的一列数
1.3
据课上给出的线性表ADT定义,实现集合的(初始化、插入、删除、查找、交集、并集、差集、判空集)
1.4
线性表长度:6
元素:4 5 6 7 9 10
2.
2.1
void main(){
//删除并输出
INlist( La,1,*e );
printf( "删除后的结果:" );
HHHGG(La);
//插入并输出
ListInsert_L( La,1,8 );
printf( "插入后的结果:" );
HHHGG(La);
//集合的长度赋值
printf( "\n请输入集合的长度:" );
scanf( "%d", &n1 );
//循环找到满足条件的插入位置
while( p && j < i - 1 ){
p = p->next;
++j;
}
//如果不满足条件返回0
if( !p || j > i - 1 ){
return 0;
}
//申请插入位置的内存
s = ( (Linklist) malloc( sizeof(Node) ) );
**********************************/
void HHHGG( Linklist *L ){
Linklist p;//指针
//赋值
p = *L;
p = p->next;
//循环输出