/*实验2 顺序表其它操作实验目的1.进一步掌握在线性表的顺序存储结构上的一些其它操作。实验内容程序2已知两个非递减有序的线性表LA和LB,将LA和LB合并成一个线性表LC,LC也非递减有序。*/#include <iostream>#include <cstdio>using namespace std;#define ElemType int#define MAXSIZE 100//顺序表的操作/* 顺序存储类型 */typedef struct{ElemType data[MAXSIZE]; /*存放线性表的数组*/ int length; /* length是顺序表的长度*/}SeqList;/* 初始化顺序表 */SeqList SeqListInit( ){SeqList L; L.length=0; return L; }/* 求顺序表长度 */int ListLength(SeqList L) {return(L.length);}/* 遍历顺序表 */void ListTraverse(SeqList L){int i; if(L.length<=0) printf("顺序表为空\n"); else {printf("当前顺序表中的元素为:\n"); for(i=1;i<=L.length;i++) printf("%d ",L.data[i-1]); printf("\n"); }}/* 向顺序表中插入元素 */SeqList ListInsert(SeqList L,int i,ElemType x){int j; if(L.length==MAXSIZE) printf("表满,不能插入\n"); else if(i<1||i>L.length+1) printf("插入位置不正确\n"); else { for(j=L.length-1;j>=i-1;j--) L.data[j+1]=L.data[j]; L.data[i-1]=x; L.length++; } return L; }/* 从顺序表中删除元素 */SeqList ListDelete(SeqList L,int i){int j;ElemType x; if (i<1||i>L.length) printf("删除位置不正确\n"); else {x=L.data[i-1]; for(j=i;j<=L.length-1;j++) L.data[j-1]=L.data[j]; L.length--; printf("%d已被删除\n",x); } return L;}//实验内容SeqList MergeSeqList(SeqList La,SeqList Lb) /*合并顺序表*/ { int i=0; int j=0; SeqList Lc; Lc=SeqListInit(); if((ListLength(La)+ListLength(Lb))>MAXSIZE) { printf("Lc中的元素个数将超界,无法合并\n"); return Lc; } for(i=1,j=1;(i<=La.length)&&(j<=Lb.length);) { if(La.data[i-1]<=Lb.data[j-1]) { Lc=ListInsert(Lc,i+j-1,La.data[i-1]); i++; } else //(La.data[i-1]>Lb.data[j-1]) { Lc=ListInsert(Lc,i+j-1,Lb.data[j-1]); j++; }} if(i<La.length) for(;i<=La.length;i++) Lc=ListInsert(Lc,i+j-1,La.data[i-1]); else if(j<=Lb.length) for(;j<=Lb.length;j++) Lc=ListInsert(Lc,i+j-1,Lb.data[j-1]); return Lc;}void main(){ int i,j; SeqList Lc,La,Lb; La=SeqListInit(); Lb=SeqListInit(); Lc=SeqListInit(); for(i=0;i<100;i=i+2) La=ListInsert(La,i/2+1,i); for(j=1;j<100;j=j+2) Lb=ListInsert(Lb,j/2+1,j); Lc=MergeSeqList(La,Lb); ListTraverse(Lc);}

评论