• 大小: 5KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-09
  • 语言: 其他
  • 标签: C++  Sqlist  Linklist  

资源简介

数据结构线性表操作的一个实验: 实验要求 顺序和链式存储的线性表的创建、获取元素、插入和删除元素等基本操作的实现。 题目要求: 输入:一组整型数据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  链式存储和线性存储实现\linkList.cpp
     文件        8289  2018-12-19 23:36  链式存储和线性存储实现\Sqlist.cpp
     目录           0  2018-12-22 15:59  链式存储和线性存储实现\

评论

共有 条评论