顺序表作业
来源:互联网 发布:转行程序员 编辑:程序博客网 时间:2024/06/06 07:45
/*参考顺序表的基本操作,设计有序顺序表L的基本操作,主要功能函数如下,1、初始化有序顺序表L。2、建立一个有序顺序表L。存放一组有序数,或产生一组随机数并排序。3、求有序顺序表L的长度。4、有序顺序表L中取出第i个元素。5、定位函数,确定有序顺序表L值为e元素的位置。6、在有序顺序表L插入一个值为e的元素,仍有序。7、删除有序顺序表L中最后一个值为e的元素。8、将有序顺序表L中值为e元素修改值为e1,仍有序。9、将有序顺序表L中属于区间[low,high]的数据取出存入新的有序顺序表L1。10、有序顺序表LA和有序顺序表LB分别存储两个集合A和B,利用归并法分别求出两个集合的并集、交集和差集。11、已知顺序表L,试编写算法清除顺序表L中多余的重复元素。*/
#include <cstdlib>#define MaxSize 10typedef int ElemType; //自定义类型语句 typedef struct{ int length; ElemType data[MaxSize+1]; }SqList;//1、初始化有序顺序表L。void InitList(SqList *&L){ L=(SqList *)malloc(sizeof(SqList)); L->length =0;}//2、建立一个有序顺序表L。存放一组有序数,或产生一组随机数并排序。void CreateList(SqList *&L,ElemType a[],int n)//建立顺序表 { int i; for(i=1;i<=n;i++) L->data[i]=a[i]; L->length=n;}//3、求有序顺序表L的长度。int ListLength(SqList *L){ int n; n=L->length ;return n;}//4、有序顺序表L中取出第i个元素。bool GetElem(SqList *L,int i,ElemType &e){ if(i<1 || i>L->length ) return false; e=L->data[i]; return true; } //输出第i个数int pushi(SqList *&L,int i){ if(i>L->length)return false; else return(L->data[i]);}//5、定位函数,确定有序顺序表L值为e元素的位置。int LocatElem(SqList *L,ElemType e){ int i=1;while(i<=L->length && L->data[i]!=e)i++;if(i<=L->length) return i;else return 0;}//6、在有序顺序表L插入一个值为e的元素,仍有序。void ListInsert(SqList *&L,ElemType e){ int i=0; int j; while(i<=L->length&&e>=L->data[i]) i++; for( j=L->length;j>=i;j--) L->data[j+1]=L->data[j]; L->data[i]=e; L->length ++; }//7、删除有序顺序表L中最后一个值为e的元素。bool ListDelete(SqList *&L,ElemType e){ int i=L->length,k;while(L->data[i]!=e) i--;if(i<0||(e<L->data[i]&&e>L->data[i-1])) return false;for(k=i;k<L->length;k++) L->data[k]=L->data[k+1]; L->length --; return true;}//8、将有序顺序表L中值为e元素修改值为e1,仍有序。bool change(SqList *&L,ElemType e,ElemType e1){//首先要找到e所在位置int i=1,j;while(L->data[i]!=e)i++;if(i>L->length)return false; if(L->data[i]==e)j=i;//记下e所在位置序号L->data[j]=e1;//e1替换后,需要重新排序 int ii,jj,t;for(ii=1;ii<=L->length;ii++){for(jj=ii+1;jj<L->length;jj++){ if(L->data[ii]>L->data[jj]){t=L->data[jj];L->data[jj]=L->data[ii];L->data[ii]=t;}}} return true;}//9、将有序顺序表L中属于区间[low,high]的数据取出存入新的有序顺序表L1。bool ex(SqList *&L,ElemType low,ElemType high,SqList *&L1){int i=1;while(i<=L->length&&L->data[i]<low)i++;if(i>L->length)return false;if(L->data[i]>high)return false; L1=(SqList *)malloc(sizeof(SqList)); L1->length =0;int k=1,j;j=i;while(i<=L->length&&L->data[i]<=high){L1->data[k]=L->data[i];i++;k++;}L1->length=k-1;while(i<L->length){L->data[j]=L->data[i];i++;j++;} return true;}//10、有序顺序表LA和有序顺序表LB分别存储两个集合A和B,利用归并法分别求出两个集合的并集、交集和差集。 //归并求并集void unionsum(SqList *&LA,SqList *&LB,SqList *&LC){ InitList(LC); int i,j,k; i=1;k=1;j=1; while(i<=LA->length&&j<=LB->length) { if(LA->data[i]<LB->data[j]) { LC->data[k]=LA->data[i];k++;i++; } else if(LA->data[i]==LB->data[j]) { LC->data[k]=LA->data[i]; k++; i++; j++; } else { LC->data[k]=LB->data[j]; k++; j++; } } while(i<LA->length) { LC->data[k]=LA->data[i]; i++; k++; } while(j<LB->length) { LC->data[k]=LB->data[j]; j++; k++; }}//求交集 /*void intersection(SqList *&LA,SqList *&LB,SqList *&LC){int i,j;int K=1;for(i=1,j=1;i<=LA->length,j<=LB->length;i++,j++){while(LA->data[i]==LB->data[j]){LC->data[K]=LA->data[i];k++; }}}//A-B(属于A但不属于B)void complement(SqList *&LA,SqList *&LB,SqList *&LC){int i,j;int K=1;for(i=1,j=1;i<=LA->length,j<=LB->length;i++,j++){while(LA->data[i]!=LB->data[j]){LC->data[K]=LA->data[i];k++; }}}*///11、已知顺序表L,试编写算法清除顺序表L中多余的重复元素。void delsame(SqList &L) { int i,j,k; if (L.length>0) { j=0; for(i=1;i<L.length;i++) {k=0; while (k<=j&&L.data[k]!=L.data[i]) k++; if(k<j) {j++; L.data[j]=L.data[i];} } L.length=j+1; }}void main(){ SqList *L,*L1; ElemType a[]={0,11,22,33,44,44,55,66,66,66,77},e; InitList(L); CreateList(L,a,10); int len; len=ListLength(L); bool b; b=GetElem(L,3,e); b=ListDelete(L,66); //b=ex(L,30,60,L1);}
阅读全文
0 0
- 作业一顺序表
- 作业一 顺序表
- 顺序表作业
- 顺序表查找课后作业
- 作业二 顺序表问题
- 顺序表(作业一)
- 第二章顺序表视频中的作业
- 作业0:顺序表的基本操作
- 作业:顺序图片显示器
- 15顺序 VB作业
- 作业4--线性表类型定义与顺序表操作
- 软基作业——顺序线性表的插入
- 数据结构第一次作业(学生信息管理系统-顺序表&&链表)
- 第四次作业 6-2 有序顺序表的插入
- 【顺序栈作业】顺序栈的实现
- 【数据结构作业六a】建立一个顺序表,用顺序查找、折半查找的方法对其实施查找
- 第四次作业 6-1 顺序表创建和就地逆置
- 作业四 顺序表的排序和查找操作(未完成)
- 树型DP基础题目总结
- 关系数据库规范化理论---范式
- 两数和-输入已排序的数组-LintCode
- vue2.0 父子传值,子父传值
- 软件设计师考试
- 顺序表作业
- PIPE
- Leetcode206
- Unable to inject views for 。。。。
- 三级菜单
- spring data jpa使用错误记录
- ubuntu 防火墙操作
- 解决Caffe训练过程中loss不变问题
- Python Windows pyhs2下模块安装