链表实现集合实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//输入集合的元素
CreateList_L( Lb, n1 );
//查找
printf( "\n" );
printf( "查找结果:" );
LinkLocate_L( Lb, 3 );
//删除并输出
INlist( Lb,1,*e );
printf( "删除后的结果:" );
HHHGG(Lb);
//插入并输出
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( "集合的元素:" );
}
printf( "\n" );
}
3.1.9 void BJ( Linklist *La, Linklist *Lb )
/******************************************
功能:集合的并集
参数:两个集合的头地址
返回值:无
******************************************/
功能:删பைடு நூலகம்元素
参数:头地址、插入位置
返回值:1或0
********************************************/
status INlist( Linklist *L, int i, ElemType *e ){
Linklist p;//指针
Linklist q;//指针
int j = 0;//中间变量
int n, n1;//中间变量
//集合的长度赋值
printf( "请输入集合的长度:" );
scanf( "%d", &n );
//输入集合的元素
CreateList_L( La, n );
//查找
printf( "\n" );
printf( "查找结果:" );
LinkLocate_L( La, 3 );
*e = q->data;
free(q);
return 1;
}
3.1.7 void CreateList_L(Linklist *L, int n)
/*****************************************
功能:创建链表集合
参数:集合长度
返回值:无
*****************************************/
printf ("元素位置:i=%d\n",i);
}
}
3.1.5 int ListInsert_L( Linklist *L, int i, ElemType e )
/*****************************************
功能:向集合中插入元素
参数:头地址、插入位置、插入元素
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;
功能:创建链表集合
参数:集合长度
返回值:无
*****************************************/
void CreateList_L(Linklist *L, int n)
/**********************************
功能:输出集合的元素
参数:头结点地址
参数:1或0
*****************************************/
int ListInsert_L( Linklist *L, int i, ElemType e ){
Linklist p;//指针
Linklist s;//指针
int j = 0;//中间变量
//赋值
p = *L;
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)
返回值:无
**********************************/
void HHHGG( Linklist *L )
/******************************************
功能:集合的并集
参数:两个集合的头地址
返回值:无
******************************************/
void JJ( Linklist *La, Linklist *Lb )
/****************************************
功能:集合的差集
参数:两个集合的头地址
返回值:无
****************************************/
void CJ( Linklist *La, Linklist *Lb )
Linklist p;//指针
//赋值
p=(*L)->next;
i=1;
//循环查找
while (p!=NULL && p->data != x){
p= p->next;
i++;
}
//条件判断输出结果
if (!p) printf ("Not found! \n");
else {
printf( "你查找的元素存在!\n" );
//循环找到满足条件的插入位置
while( p && j < i - 1 ){
p = p->next;
++j;
}
//如果不满足条件返回0
if( !p || j > i - 1 ){
return 0;
}
//申请插入位置的内存
s = ( (Linklist) malloc( sizeof(Node) ) );
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
void BJ( Linklist *La, Linklist *Lb )
/*********************************************
功能:两个集合的交集
参数:两个集合的头地址
返回值:无
*********************************************/
//申请内存
Linklist *La = (Linklist*)malloc(sizeof(Linklist));
Linklist *Lb = (Linklist*)malloc(sizeof(Linklist));
ElemType *e = (ElemType*)malloc(sizeof(ElemType));
//赋值
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;
for ( i=n; i > 0; --i ){
printf( "%d", p->data );
p = p->next;
}
}
3.1.8 void HHHGG( Linklist *L )
/**********************************
功能:输出集合的元素
参数:头结点地址
返回值:无
**********************************/
void HHHGG( Linklist *L ){
Linklist p;//指针
//赋值
p = *L;
p = p->next;
//循环输出
while( p != NULL ){
printf( "%d ", p->data );
p = p->next;
线性表实现实验报告
班级:计算机2班学号:姓名:
1.
1.1
输入形式:整数
输入范围:整数集合长度不能超过1000
1.2
用空格分开的一列数
1.3
据课上给出的线性表ADT定义,实现集合的(初始化、插入、删除、查找、交集、并集、差集、判空集)
1.4
线性表长度:6
元素:4 5 6 7 9 10
2.
2.1
void main(){
/*************************************
功能:查找集合中的元素
参数:需要查找的元素、指针头地址
返回值:无
*************************************/
int LinkLocate_L (Linklist *L, int x)
{
int i; //中间变量
//删除并输出
INlist( La,1,*e );
printf( "删除后的结果:" );
HHHGG(La);
//插入并输出
ListInsert_L( La,1,8 );
printf( "插入后的结果:" );
HHHGG(La);
//集合的长度赋值
printf( "\n请输入集合的长度:" );
scanf( "%d", &n1 );
void CreateList_L(Linklist *L, int n)
{ Linklist p;//指针
int i;//中间变量
//申请节点空间
*L=(Linklist)malloc(sizeof(Node));
//置空
(*L)->next = NULL;
//对集合进行赋值
printf( "请输入集合的元素:" );
//赋值
s->data = e;
s->next = p->next;
p->next = s;
return 1;
}
3.1.6 status INlist( Linklist *L, int i, ElemType *e )
/********************************************
功能:向集合中插入元素
参数:头地址、插入位置、插入元素
参数:1或0
*****************************************/
int ListInsert_L( Linklist *L, int i, ElemType e )
/********************************************
功能:删除元素
参数:头地址、插入位置
返回值:1或0
********************************************/
status INlist( Linklist *L, int i, ElemType *e )
/*****************************************
2.3
/*************************************
功能:查找集合中的元素
参数:需要查找的元素、指针头地址
返回值:无
*************************************/
int LinkLocate_L (Linklist *L, int x)
/*****************************************
/*********************************
功能:判断集合是否为空
参数:头地址
返回值:无
*********************************/
void PKJ( Linklist *La )
3.
3.1
3.1.1
#include<stdio.h>
#include<stdlib.h>
void BJ( Linklist *La, Linklist *Lb ){
Linklist p,q,first; //指针
int x;//中间变量
//赋值
first = (*La)->next;
p=(*Lb)->next;
//循环求并集
while (p) {
x=p->data;
p=p->next;
相关文档
最新文档