资源简介
数据结构线性表操作的一个实验:
实验要求
顺序和链式存储的线性表的创建、获取元素、插入和删除元素等基本操作的实现。
题目要求:
输入:一组整型数据A,一组整型数据B
输出:A与B的交集,以及A与B的并集
要求:A和B使用两种存储方式:顺序存储和链式存储。
代码片段和文件信息
#include
#include
#include
using namespace std;
#define OK 1//定义常用判断词为整型数值
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;//定义Status为整型类型
typedef int ElemType;//ElemType类型可根据实际情况改变,首先定义ElemType为整型类型
struct Node;//声明结点结构体
typedef struct Node *PtrToNode;//定义PtrToNode、linkList、Position类型
typedef PtrToNode linkList;
typedef PtrToNode Position;
struct Node//结构体定义
{
ElemType data;
Position next;
};
//函数的声明
linkList InitList();//创建空的单链表
Status IsEmpty(linkList L);//判断是否为空,返回0或1
Status GetLength(linkList L);//获得单链表的长度并返回
Status GetElem(linkList Lint iElemType &e);//将单链表L中的弟i个结点元素值返回给e
Status Insert(linkList Lint iElemType e);//在单链表的第i个结点前插入元素值为e的结点
Status Delete(linkList Lint iElemType &e);//删除单链表中第i个结点,并用e返回其值
Status AvoidList(linkList L);//除掉集合中重复的元素
Status DispList(linkList L);//打印集合中所有的元素
Status IntersectlinkList(linkList LalinkList Lb);//求两个集合的交集并打印这个交集的所有元素
Status UnionlinkList(linkList LalinkList Lb);//求两个集合的并集并打印这个并集的所有元素
//函数定义
//单链表初始化
linkList InitList()
{
linkList L;
L =(linkList) malloc(sizeof(Node)) ;//创建一个单链表的头结点,并且指向空
L->next = NULL;
return L;
}
//判断单链表是否为空,并返回判断结果
Status IsEmpty(linkList L)
{
return L->next == NULL;
}
//获取单链表的长度并返回
Status GetLength(linkList L)
{
if(IsEmpty(L)==1)//如果单链表为空,则返回0
return 0;
Position p;//声明一个指针
p=L;
int i=0;
while(p->next)//使用p->next遍历所有结点直到指向NULL并计数
{
i++;
p=p->next;
}
return i;
}
//将单链表L中的弟i个位置元素值返回给e
Status GetElem(linkList Lint i ElemType &e)
{
if(IsEmpty(L)==1)//如果单链表为空,停止寻找
return ERROR;
int j = 1;//j为计数器
Position p;//声明一个指针让p指向L的第一个结点
p=L->next;
while(p&&j {
p=p->next;
j++;
}
if(!p||j>i)
return ERROR;//第i个结点不存在
e=p->data;//取第i个结点的数据
return OK;
}
//在单链表中的第i个结点前插入值为e的结点
Status Insert(linkList Lint iElemType e)
{
if(i<1)
return ERROR;
int j=1;
Position ps;
p = L;
while(p&&j {
p = p->next;
j++;
}
if(!p||j>i)
return ERROR;//第i-1个结点不存在
s=(linkList)malloc(sizeof(Node));//生成新结点
s->data=e;
s->next=p->next;//将p的后继结点赋值给s的后继结点
p->next=s;
return OK;
}
//删除单链表中第i个结点,并用e返回其值
Status Delete(linkList Lint iElemType &e)
{
if(IsEmpty(L)==1)
return ERROR;
int j=1;
Position ps;
p = L;
while (p->next && j {
p = p->next;
j++;
}
if(!(p->next)|| j>i)
return ERROR;//第i个结点不存在
s=p->next;
p->next=s->next;//将s的后继赋值给p的后继
e = s->data;//将s结点中的数据给e
free(s);//释放s结点
return OK;
}
//除掉集合中重复的元素
Status AvoidList(linkList L)
{
if(IsEmpty(L)==1)
return ERROR;
ElemType ee1e2e3;
for(int i=1; i<=GetLength(L); i++)//以前一个元素的值为基准,让其后的每一个值与它比较。
{
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 7777 2018-10-14 13:06 链式存储和线性存储实现\li
文件 8289 2018-12-19 23:36 链式存储和线性存储实现\Sqlist.cpp
目录 0 2018-12-22 15:59 链式存储和线性存储实现\
- 上一篇:FTP客户端 源代码
- 下一篇:链表实现学生管理
相关资源
- 链表实现学生管理
- 基于qt开发的会员管理系统
- 数据结构插队问题代码
- 输入10个整数,将其中最小的数与第一
- 科学计算导论实验报告
- 球体背面消隐课程设计及报告
- G.729的实现代码
- 东方电子DF9300通讯管理机包含规约:
- opencv检查图片中是否有人
- glaux系列包
- 无向连通图最小生成树
- 设计一个模拟计算器的程序,要求能
- 三次样条函数插值实现(第二边界条
- 太阳天顶角计算工具
- TDI驱动源代码
- KinectSDK2.0面部获取
- 种子填充算法VC程序.rar
- 实现了异常管理流程QtSharpCore.zip
- VC编写的简单聊天程序
- 利用USB虚拟总线驱动模拟USB摄像头的
- C经典教材-C和指针课后习题答案
- Poco:TCPServer框架
- 基于开源库tufao,一个C + +的异步 We
- jsoncpp-1.9.3-win64-mingw.zip
- 基于图片信息的相机内参获取
- 计算机操作系统实验代码6个实验
- c 程序设计谭浩强课后习题答案 完整
- QT项目源码
- visual studio 2017中英文企业版离线安装
- visual studio 2019中英文企业版离线安装
评论
共有 条评论