#include <stdio.h> #include <iostream> #include <stdlib.h> #include <malloc.h> #define LISTINCREASMENT 100 /*每次分配元素的个数*/ #define LISTSIZE 10 /*顺序存储的最大个数*/ #define OVERFLOW -1 #define OK 1 using namespace std; typedef int ElemType; typedef struct /*顺序表元素的的定义*/ { ElemType * elem; int length; int listsize; } Sqlist; int SqInitial(Sqlist &L) /*初始化线性表*/ { L.elem=(ElemType *) malloc (LISTSIZE*sizeof(ElemType)); if (! L.elem) exit(OVERFLOW); //存储分配失败 L.length=0; L.listsize=LISTSIZE; return OK; } int ListInsert(Sqlist &L,int i,ElemType e) /*插入元素*/ { if(i<1|| i > L.length+1) exit(-1); if(L.length>=L.listsize) { ElemType*newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREASMENT) *sizeof(ElemType)); if(!newbase) return OVERFLOW;// 当前存储空间已满L.elem=newbase; L.listsize+=LISTINCREASMENT; /*表的容量不足分配内存*/ } ElemType * q=&(L.elem[i-1]); ElemType * p; for(p=&(L.elem[L.length-1]); p>=q; --p) *(p+1)=*p; *q=e; ++L.length; return OK; } void ListDelete(Sqlist &L,int i,ElemType &e) //删除线性表中第i个位置上的元素 { if(i<1||i>L.length) exit(-1); else { e=L.elem[i-1]; for(;i<L.length;i++) { L.elem[i-1]=L.elem[i]; } L.length--; } } ElemType GetElem(Sqlist &L,int i) { if(i<1||i>L.length) exit(-1); else { return L.elem[i-1]; } } void display(Sqlist &L) { int i; for(i=0;i<L.length-1;i++) { cout<<L.elem[i]<<" "; } cout<<L.elem[i]<<endl; } void Retrograde(Sqlist &L,int m,int n) //逆置 { int i,t,j; //cout<<"m=="<<m<<" n=="<<n<<endl; for(i=m,j=n;i<=j;i++,j--) //i指向首元素,j指向尾元素,通过i++,和j--向中心靠拢 { //cout<<"L.elem[i]=="<<L.elem[i]<<" L.elem[n-i]=="<<L.elem[i]<<endl; t = L.elem[i]; L.elem[i] = L.elem[j]; L.elem[j] = t; } } int main() { Sqlist L; int t =1 ,d,n,len,m; cin>>n; while(n--) { SqInitial(L); //printf("构建长度为len的顺序表。\n"); cin>>len>>m; for(t=1; t<=len; t++) /*构建长度为n的顺序表*/ { //printf("Please input the %dth list elem:",t); scanf("%d",&d); ListInsert(L,t,d); } Retrograde(L,0,len-1); Retrograde(L,len-m,len-1); Retrograde(L,0,len-m-1); display(L); }return 0; }
转载于:https://www.cnblogs.com/CCCrunner/p/6444615.html
相关资源:线性表和顺序表原地逆置