博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构中线性表的基本操作-合并两个线性表-依照元素升序排列
阅读量:5291 次
发布时间:2019-06-14

本文共 2551 字,大约阅读时间需要 8 分钟。

#include
#include
#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;}

转载于:https://www.cnblogs.com/mfrbuaa/p/3774962.html

你可能感兴趣的文章
Spark的启动进程详解
查看>>
使用命令创建数据库和表
查看>>
数据库的高级查询
查看>>
Android 利用Sharp样式设置文本框EditText圆角形状
查看>>
[YTU]_2443 ( C++习题 复数类--重载运算符3+)
查看>>
sdut_1189
查看>>
归并排序
查看>>
机器视觉:SSD Single Shot MultiBox Detector
查看>>
走遍美国 —— 各州及其别名
查看>>
国内外免费电子书(数学、算法、图像、深度学习、机器学习)
查看>>
狄利克雷过程(Dirichlet Process)
查看>>
五子棋项目的实现(二)博弈树算法的描述
查看>>
Hibernate : Disabling contextual LOB creation as createClob() method threw error
查看>>
【bzoj4872】[Shoi2017]分手是祝愿 期望dp
查看>>
字符串元转分
查看>>
thinkphp 防sql注入
查看>>
201521123044 《Java程序设计》第1周学习总结
查看>>
MIT Scheme 的基本使用
查看>>
程序员的“机械同感”
查看>>
在16aspx.com上下了一个简单商品房销售系统源码,怎么修改它的默认登录名和密码...
查看>>