标签:
#include<stdio.h> #include<string.h> #include<algorithm> #define MAX 1000 #define MAXM 10 using namespace std; typedef int Status; bool flag; int Lx[MAX],Ly[MAX],L3[MAX<<1]; int lengtha,lengthb,n,m,x,k; typedef struct { int *elem; int length;//当前表中元素的个数(肯定小于数组单元的个数) int listsize;//当前顺序表中数组单元的个数 }sqlist; Status initlist(sqlist &L)//创建线性表 { L.elem=(int *)malloc(sizeof(sqlist)*MAX);//=ElemType[MAX]; if(!L.elem) return -1; L.length=0; return 1; } Status listshuru(sqlist &L)//输入数据 { int val; for(int i=0;i<n;i++) { scanf("%d",&val); L.elem[i]=val; L.length++; } return 1; } void paixu(sqlist &L)//排序 { sort(L.elem,L.elem+n); //return 1; } Status panduanrong(sqlist &L)//判断是否需要扩容 { if(L.length>MAX) return -1; else return 1; } Status kuorong(sqlist &L)//进行扩容 { int *newbase=(int *)realloc(L.elem,(L.listsize+MAXM)*sizeof(sqlist));//扩容 if(!newbase) return -1; return 1; } Status listinsert(sqlist &L,int i,int e)//插入数据 { if(i<1||i>L.length+1) return -1; for(int j=L.length-1;j>=i-1;j--) L.elem[j+1]=L.elem[j]; L.elem[i-1]=e; L.length++; return 1; } Status listdele(sqlist &L,int i,int &e)//删除数据 { if(i<1||i>L.length) return -1; int p=i-1;//要被删除的位置 e=p;//记录被删除的位置的值 int q=L.length-1;//表尾元素 //printf("%d# %d#\n",p,q); for(++p;p<=q;++p) L.elem[p-1]=L.elem[p]; //*(p-1)=*p; --L.length; return 1; } Status listinprit(sqlist L)//输出数据 { for(int i=0;i<L.length;i++) printf("%d ",L.elem[i]); printf("\n"); return 1; } Status listclear(sqlist &L)//清空表 { L.length=0; return 1; } void MergeList()//合并表 { int j=0; for(int i=0;i<lengtha;i++) L3[i]=Lx[i]; for(int i=lengtha;i<lengtha+lengthb;i++) L3[i]=Ly[j++]; } int main() { int k,a,i; printf("请输入一个n值,代表你要构建的线性表的长度\n"); while(scanf("%d",&n)!=EOF) { for(i=1;i<=2;i++) { sqlist L1; if(initlist(L1)==-1) { printf("线性表构建失败,请重新输入n值\n"); continue; } printf("请为L%d输入n个数据\n",i); listshuru(L1); printf("L%d排序后的结果\n",i); paixu(L1); listinprit(L1); printf("是否执行插入操作,是 请输入1,不是请输入2\n"); scanf("%d",&a); if(a==1) { printf("请在插入操作前输入您想要插入的位置以及要插入的数\n"); int vis=0; flag=false; while(!vis) { scanf("%d%d",&m,&x); if(listinsert(L1,m,x)==-1) printf("您的插入位置不合法,请在数据范围内输入,(注:1<=m<=n)\n"); else vis=1; if(vis==1) { if(panduanrong(L1)==-1) { printf("若需要扩容输入1,若不需要扩容输入2重新进行所有操作,请输入:\n"); scanf("%d",&a); if(a==1) { if(kuorong(L1)==-1) { printf("对不起,扩容失败,请重新进行所有操作\n"); flag=true; break; } else printf("恭喜您,扩容成功\n"); } else { flag=true; break; } } } } if(flag) continue; printf("输出插入后的序列\n"); listinprit(L1); } printf("是否执行删除操作,是 请输入1,不是请输入2\n"); scanf("%d",&a); if(a==1) { printf("再进行删除操作前,请您先输入要删除的位置\n"); int b,visb=0; while(!visb) { scanf("%d",&b); if(listdele(L1,b,k)==-1) printf("您的插入位置不合法,请在数据范围内输入,(注:1<=b<=n)\n"); else visb=1; if(visb==1) { printf("输出删除元素后的序列\n"); listinprit(L1); } } } if(i==1) { for(int j=0;j<L1.length;j++) Lx[j]=L1.elem[j]; lengtha=L1.length; } else { for(int j=0;j<L1.length;j++) Ly[j]=L1.elem[j]; lengthb=L1.length; } listclear(L1); } printf("是否执行合并操作,是 请输入1,不是请输入2\n"); scanf("%d",&a); if(a==1) { MergeList(); for(int j=0;j<lengtha+lengthb;j++) printf("%d ",L3[j]); printf("\n"); } printf("已经执行到第%d次,是否继续执行,是 请输入1,不是请输入2\n"); scanf("%d",&a); if(a==2) break; } return 0; }
标签:
原文地址:http://www.cnblogs.com/tonghao/p/4833723.html