SeqList.h

#pragma once
#define ListSize 100
typedef int DataType;
typedef struct {DataType list[ListSize];int length;
}SeqList;void InitList(SeqList* L);/*初始化线性表*/
int ListEmpty(SeqList L);/*判断线性表是否为空,为空返回1,否则返回0*/
int GetElem(SeqList L, int i, DataType* e);/*查找线性表的第i个元素,查找成功将该值返回给e,并返回1表示成功,
否则返回-1表示失败*/
int LocateElem(SeqList L, DataType e);/*查找线性表中元素为e的元素是第多少个元素*/
int InsertList(SeqList* L, int i, DataType e);/*在顺序表的第i个位置插入元素e,插入成功返回1,如果插入的位置不合法,返回-1,顺序表满返回0*/
int DeleteList(SeqList* L, int i, DataType* e);
int ListLength(SeqList L);
void ClearList(SeqList* L);
void MergeList(SeqList A, SeqList B, SeqList* C);
void UnionAB(SeqList* A, SeqList B);/*将B中不在A中的元素插入到A*/
void DelElem(SeqList* A, SeqList B);/*元素在A,B中都存在,在顺序表A中删除该元素*/
void PrintList(SeqList L); 

SeqList.cpp

#include<cstdio>
#include"SeqList.h"void InitList(SeqList* L)
/*初始化线性表*/
{L->length = 0; /*把线性表的长度置为0*/
}int ListEmpty(SeqList L)
/*判断线性表是否为空,为空返回1,否则返回0*/
{if (L.length == 0) {return 1;}else {return 0;}
}int GetElem(SeqList L, int i, DataType* e)
/*查找线性表的第i个元素,查找成功将该值返回给e,并返回1表示成功,
否则返回-1表示失败*/
{if (i<1 || i>L.length) {return -1;}*e = L.list[i - 1];return 1;
}int LocateElem(SeqList L, DataType e)
/*查找线性表中元素为e的元素是第多少个元素*/
{int i;for (i = 0; i < L.length; i++) {if (L.list[i] == e) {return i + 1;}}return 0;
}int InsertList(SeqList* L, int i, DataType e)
/*在顺序表的第i个位置插入元素e,插入成功返回1,如果插入的位置不合法,返回-1,顺序表满返回0*/
{int j;if (i<1 || i>L->length + 1)/*在插入前,判断插入位置是否合法*/{printf("插入的位置i不合法!\n");return -1;}else if (L->length >= ListSize)/*插入之前,判断是否已经满,不能插入元素*/{printf("顺序表已满,不能插入元素。\n");return 0;}else {for (j = L->length; j >= i; j--)/*将第i个位置后的元素一次后移*/{L->list[j] = L->list[j - 1];}L->list[i - 1] = e;/*插入元素到第i个位置*/L->length++;return 1;}
}int DeleteList(SeqList* L, int i, DataType* e) {int j;if (L->length <= 0) {printf("顺序表已经不能够进行删除!\n");return 0;}else if (i<1 || i>L->length + 1) {printf("删除的位置不合法!\n");return -1;}else {*e = L->list[i - 1];/*获取第i个位置的元素*/for (j = i; j <= L->length - 1; j++) {L->list[j - 1] = L->list[j];}L->length = L->length - 1;return 1;}
}int ListLength(SeqList L)
{return L.length;
}void ClearList(SeqList* L)
{L->length = 0;
}void MergeList(SeqList A, SeqList B, SeqList* C) {int i, j, k;DataType e1, e2;//用于存储A和B顺序表中的元素i = 1, j = 1, k = 1;while (i <= A.length && j <= B.length) {GetElem(A, i, &e1);GetElem(B, j, &e2);if (e1 <= e2) {InsertList(C, k, e1);/*将较小的元素插入C中*/i++;/*往后移动一个元素*/k++;/*C顺序表中待插入位置+1*/}else {InsertList(C, k, e2);j++;k++;}}while (i <= A.length)/*这时如果A还有剩余,B中已经没有元素*/ {GetElem(A, i, &e1);InsertList(C, k, e1);/*将A中剩余元素插入到C中*/i++;k++;}while (j <= B.length)/*这时B中还有剩余元素,A中已经没有元素*/ {GetElem(B, j, &e2);InsertList(C, k, e2);j++;k++;}C->length = A.length + B.length;
}void UnionAB(SeqList* A, SeqList B) {DataType e;for (int i = 1; i <= B.length; i++){GetElem(B, i, &e);if (LocateElem(*A, e) == 0) {InsertList(A, A->length + 1, e);/*在A的末尾加入元素*/}}
}
void DelElem(SeqList* A, SeqList B) {DataType e;for (int i = 1; i <= B.length; i++){GetElem(B, i, &e);int pos = LocateElem(*A, e);if (pos != 0) {DeleteList(A, pos, &e);/*A中存在e,则将其删除*/}}
}
void PrintList(SeqList L) {DataType elem;for (int i = 1; i <= L.length; i++){if (GetElem(L, i, &elem)) {printf("%4d", elem);}}printf("\n");
}

Test.cpp

void TestSeqList_Merge() {int i;DataType a[] = { 8,17,17,25,29 };DataType b[] = { 3,9,21,21,26,27 };SeqList A, B, C;/*声明顺序表A,B,C*/InitList(&A);/*初始化顺序表A, B, C*/InitList(&B);InitList(&C);for (i = 1; i <= sizeof(a) / sizeof(a[0]); i++) {/*将数组a中的元素插入顺序表A*/InsertList(&A, i, a[i - 1]);      }for (i = 1; i <= sizeof(b) / sizeof(b[0]); i++) {/*将数组b中的元素插入顺序表B*/InsertList(&B, i, b[i - 1]);}printf("顺序表中A的元素:\n");PrintList(A);printf("顺序表中B的元素:\n");PrintList(B);printf("合并A,B中的元素得到C:\n");MergeList(A, B, &C);PrintList(C);}

void TestSeqList_Union() {int i;DataType a[] = { 8,17,25,29 };DataType b[] = { 3,8,9,21,26,27 };SeqList A, B, C;/*声明顺序表A,B,C*/InitList(&A);/*初始化顺序表A, B, C*/InitList(&B);InitList(&C);for (i = 1; i <= sizeof(a) / sizeof(a[0]); i++) {/*将数组a中的元素插入顺序表A*/InsertList(&A, i, a[i - 1]);}for (i = 1; i <= sizeof(b) / sizeof(b[0]); i++) {/*将数组b中的元素插入顺序表B*/InsertList(&B, i, b[i - 1]);}printf("顺序表中A的元素:\n");PrintList(A);printf("顺序表中B的元素:\n");PrintList(B);printf("合并A,B中的元素得到新的A:\n");UnionAB(&A, B);PrintList(A);}

void TestSeqList_Dele() {int i;DataType a[] = { 8,17,21,25,27,29 };DataType b[] = { 3,8,9,21,26,27 };SeqList A, B, C;/*声明顺序表A,B,C*/InitList(&A);/*初始化顺序表A, B, C*/InitList(&B);InitList(&C);for (i = 1; i <= sizeof(a) / sizeof(a[0]); i++) {/*将数组a中的元素插入顺序表A*/InsertList(&A, i, a[i - 1]);}for (i = 1; i <= sizeof(b) / sizeof(b[0]); i++) {/*将数组b中的元素插入顺序表B*/InsertList(&B, i, b[i - 1]);}printf("顺序表中A的元素:\n");PrintList(A);printf("顺序表中B的元素:\n");PrintList(B);printf("删除A在B中的元素得到新的A:\n");DelElem(&A, B);PrintList(A);}

01、顺序表SeqList相关推荐

  1. 数据结构-顺序表(SeqList)

    顺序表 SeqList C实现 C++实现 结构代表数据和数据之间的关系 1.同属一个集合 不允许元素重复 2.线性关系 一对一的关系 除了第一个之外 没有直接前驱最后一个没有直接后继 中间节点都有唯 ...

  2. 顺序表(Seqlist)链表(List)的基础操作

    描述: 顺序表和链表是数据结构的基础结构之一,同样也是面试的基础.初学者对于Seqlist和List的增删改查的基础练习,为其后的Tree,HashTable,Binary Linked List,T ...

  3. 顺序表(SeqList) Java实现

    实现的操作包括: 向顺序表末尾添加数据 ( addData( Data)): 向顺序表指定位置添加数据( insertDataByLoc( Location)): 删除顺序表中指定的数据( delet ...

  4. 数据结构_顺序表SeqList(C++

    数据结构_SeqList顺序表(C++实现 文章目录 数据结构_SeqList顺序表(C++实现 前言&注意事项 顺序表实现方法 总结 结束 前言&注意事项 有些函数没有修改成员数据的 ...

  5. 顺序表SeqList的各种操作

    SeqList顺序表 顺序表是用一段物理地址连续的存储单元一次存储数据元素的线性结构,一般情况下采用数组存储,可分为静态顺序表与动态顺序表. 静态顺序表:使用定长数组存储 动态顺序表:使用动态开辟的数 ...

  6. 顺序表(SeqList)

    ---恢复内容开始--- 数据结构在上周结课,接下来就是为期几周的上机实验,说是实验课我感觉还不如不上.几乎每个人都是按着老师的要求把书上的代码打一遍,变都不变.一遍以后连自己打的什么都不知道. 与其 ...

  7. 【C语言】详解顺序表(SeqList)

  8. 【数据结构】使用Java实现顺序表类 SeqList

    目录 线性表介绍 顺序表介绍 Java->顺序表API Java->顺序表代码 使用顺序表示例 线性表介绍 数据结构中的线性存储结构分为两大类:顺序存储和链式存储,顺序存储对应的是顺序表, ...

  9. 数据结构之顺序表(二)

    这是接着之前的剩下来的部分: #include <stdlib.h> #include "SeqList.h" #include <stdio.h>SeqL ...

最新文章

  1. Repository 设计模式介绍
  2. python简历数据提取_如何使用pyPDF2从PDF格式的多页简历中提取文本数据?
  3. 关于U盘安装ubuntu-18.04安装时候出现的grub-efi-amd64-signed的问题。
  4. Asp.net,C# 纯数字加密解密字符串
  5. 告诉你银行在年底为存储做的小动作
  6. java 方法 示例_Java语言环境getISOLanguages()方法与示例
  7. r语言的rmd文件转换成html,.Rmd文件转化为PDF报告
  8. Confluence或JIRA验证码乱码的问题
  9. 给你看一下真实的后浪...
  10. 计算机学院军训条幅,最新各大高校欢迎新生横幅,确认过眼神,师兄师姐Skr人才。...
  11. diy手工制作泡沫小球_一撮羊毛用针来回的戳,DIY手工制作羊毛毡小动物,越戳越带劲...
  12. axure插件chrome浏览器和360浏览器安装指南
  13. 3ds Max 2016的安装和破解
  14. 谷歌是如何跌下神坛的?
  15. O3DF执行董事Royal O’Brien:开源没有边界,所有共享的声音都会变成实际方向
  16. 2020iOS开发工程师面试题汇总(内含面试技巧)-看完BATJ面试官对你竖起大拇指!
  17. 操作系统课程设计-进程管理
  18. 改进我的人人农场收菜外挂
  19. JSON转化为JavaBean
  20. php获取当前周的起止日期,php获取本周开始日期和结束日期的方法

热门文章

  1. 使用IEEE802.1Q VLAN实现单线复用之WiFi提速篇
  2. C# NX二次开发:制图模块中尺寸线标注类型的type值和subtype值归纳总结
  3. linux 查看桌面目录下,16个桌面Linux用户必须要知道的Shell命令
  4. Linux下编译snmp失败,解决编译snmp++出错
  5. shopee、ebay测评自养号环境解决方案(补单系统)
  6. 苏州新导RFID医院固定资产管理系统,RFID固定资产管理应用行业
  7. 为Surface Neo和Surface Duo准备代码
  8. 上海综合保险卡如何使用
  9. Sandboxie工具
  10. html矢量图 对画布的拖拽,d3.js画矢量图+可拖拽的实现思路