数据结构中线性表的基本操作-合并两个线性表-依照元素升序排列

#include<iostream>
#include<stdlib.h>

#define LIST_INIT_SIZE 10/*线性表初始长度*/
#define LIST_CREATENT 2/*每次的增量*/

typedef int ElemType;

using namespace std;

typedef struct SqList/*线性表的数据结构定义*/
{
ElemType *elem;/*线性表基址*/
int length;/*当前线性表所含的元素个数*/
int listSize;/*已经分配的长度*/
}SqList;

void InitList(SqList &L)/*线性表初始化*/
{
L.elem = (ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
L.length = 0;
L.listSize = LIST_INIT_SIZE;
}

void DestoryList(SqList &L)/*销毁一个线性表*/
{
free(L.elem);
L.length = 0;
L.listSize = 0;
}

void ClearList(SqList &L)/*清空一个线性表*/
{
L.length = 0;
}

void listInsert(SqList &L, int k)/*往线性表中加入一个元素,依照元素从小到大的顺序*/
{
ElemType *p, *q;
if (L.length == L.listSize)/*线性表已经没有空间了,须要分配新空间*/
{
ElemType *newBase;
newBase = (ElemType*)realloc(L.elem,(L.listSize+LIST_CREATENT)*sizeof(ElemType));
if (!newBase)
exit(1);
L.elem = newBase;
L.listSize += LIST_CREATENT;
}
p = q = L.elem;/*记录元素线性表開始的位置*/
if (L.length == 0)/*假设表中没有元素,则直接插入元素就可以*/
{
*p = k;
}
else/*线性表中有元素,则须要进行比較,找到合适的插入位置*/
{
int i = 0;
for (i = 0; i != L.length - 1; ++i, ++q);/*将指针指向线性表的最后一个元素*/
for (i = 0; i != L.length&&k > *p; ++i, ++p);/*找到要插入的位置*/
for (--p; q != p; *(q + 1) = *q, --q);/*从后往前依次移动元素*/
*(q + 1) = k;/*找到插入位置*/
}
++L.length;/*线性表长度添加1*/
}

void createList(SqList &L, int *k, int n)/*创建一个线性表*/
{
int i;
for (i = 0; i < n; ++i)
listInsert(L,k[i]);
}

void ListDelete(SqList &L, int k)/*删除线性表中的一个元素*/
{
ElemType *p, *q;
p = q = L.elem;
int i,flag=1;
for (i=0; i != L.length; ++p, ++q, ++i)
{
if (*p == k)
{
for (; i != L.length; ++p, ++i)
*p = *(p + 1);
--L.length;
cout << "Delete :" << k << endl;
flag = 0;
i = L.length;
}
}
if (flag)
cout << "Have not been found " << k << endl;
}

void ListTraveller(SqList L)/*遍历线性表*/
{
int i;
ElemType *p;
for (i = 0,p=L.elem; i != L.length; ++i)
cout << *p++ << " ";
cout << "\n";
}

bool LocateElem(SqList L,int k)
{
ElemType *p;
int i;
for (i = 0,p=L.elem; i != L.length; ++i,++p)
if (*p == k)
return true;
return false;
}

void unionSq(SqList &aL, SqList b)/*合并两个线性表*/
{
int i, bl;
ElemType *bp;
for (i = 0,bl=b.length,bp=b.elem; i != bl;++i,++bp)
if (!LocateElem(aL, *bp))
listInsert(aL,*bp);
}

int main()
{
ElemType a[] = { 1, 3,5,7,9,11,12,13}, b[] = { 2,6,8,25,32,1};
int a_len = sizeof(a) / sizeof(ElemType);
int b_len = sizeof(b) / sizeof(ElemType);
SqList sa, sb;
InitList(sa);
InitList(sb);
createList(sa, a, a_len);
createList(sb, b, b_len);
ListTraveller(sa);
ListTraveller(sb);
unionSq(sa,sb);
cout << "合并后的线性表:" << endl;
ListTraveller(sa);
return 0;
}



数据结构中线性表的基本操作-合并两个线性表-依照元素升序排列,布布扣,bubuko.com

时间: 2024-12-17 22:44:39

数据结构中线性表的基本操作-合并两个线性表-依照元素升序排列的相关文章

数据结构中线性表的基本操作-合并两个线性表

#include<iostream> #include<stdlib.h> #define LIST_INIT_SIZE 10/*线性表初始长度*/ #define LIST_CREATENT 2/*每次的增量*/ typedef int ElemType; using namespace std; typedef struct SqList/*线性表的数据结构定义*/ { ElemType *elem;/*线性表基址*/ int length;/*当前线性表所含的元素个数*/ i

数据结构(三)——基于顺序存储结构的线性表

数据结构(三)--基于顺序存储结构的线性表 一.基于顺序存储结构的线性表实现 1.顺序存储的定义 线性表的顺序存储结构是用一段地址连续的存储单元依次存储线性表中的数据元素. 2.顺序存储结构的操作 使用一维数组实现顺序存储结构. template <typename T> class SeqList:public List<T> { protected: T* m_array;//顺序存储空间 int m_length;//当前线性表的长度 }; 一维顺序存储结构可以是原生数组或是

《数据结构(C语言版)》学习——day2,线性表

1. 线性表定义 线性表是一种内部数据类型相同.数据个数有限的数据结构.线性表的长度指的是线性表中元素的个数,如果线性表的长度为0时,则称其为空表.在非空表中的每个数据元素都有一个确定的位置,其中i为数据元素ai的位序. 2. 线性表的顺序表示和实现 线性表的顺序表示指的是用一组地址连续的存储单元依次存储连续线性表的数据元素. 通常情况下,采用数组来描述数据结构中的顺序存储结构.但由于线性表的长度可变,且所需最大存储空间随问题不同而不同,因此在C语言中,可用动态分配的一维数组来进行描述. //-

两个线性表合并

数组方法(前提是两个顺序表都已排序,若未排序,则自己先排序再合并) #include<iostream> using namespace std; //创建顺序表 void create(int A[],int length){ for(int i=0;i<length;i++){ cin>>A[i]; } } //打印顺序表 void show(int A[],int length){ cout<<A[0]; for(int i=1;i<length;i+

数据结构学习-数组A[m+n]中依次存放两个线性表(a1,a2&#183;&#183;&#183;am),(b1,b2&#183;&#183;&#183;bn),将两个顺序表位置互换

将数组中的两个顺序表位置互换,即将(b1,b2···bn)放到(a1,a2···am)前边. 解法一: 将数组中的全部元素(a1,a2,···am,b1,b2,···bn)原地逆置为(bn,bn-1,···b1,am,am-1···a1),再对前n个元素和后m个元素分别逆置,得到(b1,b2···bn,a1,a2···am),从而实现位置互换. 代码: void Reverse(int a[],int left,int right,int arraySize) {//逆转(aleft,aleft

数据结构回顾之顺序存储结构中的线性表(栈与队列顺序线性表实现)

说到数据结构呢,对于一个Coder来说还是蛮重要的啦,每次看数据结构的东西都有新的收获,这两天在回顾数据结构的知识.当然啦,虽然数据结构有些是理论的东西,如果好好的理解数据结构的东西还是少不了的代码的支撑的.数据结构简单的来说吧,可以分为两大类,一个是数据的"物理存储结构",另一种是数据的"逻辑存储结构".数据的"物理存储结构"又可分为顺序的和链式的(下面将会结合着代码打印内存地址的形式来观察物理存储结构). 逻辑存储结构又可分为集合,线性, 树

数据结构学习1:实现一个简单的线性表功能

数据结构: 一个简单的线性表的实现 学习了数据结构有一段时间了,那是半年前老师课堂上讲的,最后由于一些原因,没能听到最后,前几天在写一些算法的时候,发现自己的数据结构还是太渣了,因此便又拿起了那本很有价值的数据结构的书,重新来啃这本厚厚的书,数据结构在我们编程中是非常的重要的,希望这次的学习能有一个好的开头,并且能在这个过程中有所得吧! 下面是我写的一个简单的线性表的实现: #include"stdafx.h" #include<iostream> using namesp

数据结构与算法--第5周作业(线性表合并算法)

简述顺序存储结构和链式存储结构的优缺点 ① 顺序存储时,相邻数据元素的存放地址也相邻(逻辑与物理统一):要求内存中可用存储单元的地址必须是连续的. 优点:存储密度大(=1),存储空间利用率高.缺点:插入或删除元素时不方便. ②链式存储时,相邻数据元素可随意存放,但所占存储空间分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针 优点:插入或删除元素时很方便,使用灵活.缺点:存储密度小(<1),存储空间利用率低.

2.2 将两个线性表合并成一个线性表,允许连表中有重复

#include<stdio.h> #include<stdlib.h> #include<math.h> typedef int Status ; typedef int ElemType; #define OK 1 #define ERROR 0 #define LISTSIZE 10 #define ADDSIZE 2 typedef struct { ElemType *elem; int length; int listsize; }SqList; Statu