实现输入数据逆置和顺序表实现排序是两个极其相似的过程,因此使用的顺序表的基本操作也是一样的:0基本操作前的准备,1初始化顺序表,6向顺序表插入数据元素。
要想实现输入数据元素的逆置还需要一个逆置函数,逆置函数在C++,C#语言中早已接触过,因此不陌生,记得在做大量的C++的程序代码补充的大题就写过不下数十遍,挺简单的掌握技巧,就是你输入数据的个数的一半,前后进行交换,因此逆置函数的代码为:
<span style="font-size:18px;">//逆置函数 void nizhi(SqList &L) { for(int i=0;i<L.length/2;i++) { int temp; temp=L.elem[i]; L.elem[i]=L.elem[L.length-1-i]; L.elem[L.length-1-i]=temp; } }</span>
而在主函数中只需要声明一个顺序表,输入顺序表数据元素的个数和数据,调用逆置函数,即可实现。完整的顺序表实现输入数据逆置的代码为:
<span style="font-size:18px;">#include <iostream> using namespace std; #include <malloc.h> #include <stdlib.h> #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 #define OK 1 #define TRUE 1 #define FALSE 0 #define ERROR 0 #define OVERFLOW -2 typedef int ElemType; typedef int Status; typedef struct { ElemType *elem; int length; int listsize; }SqList;//定义了一个结构体类型,并命名为Sqlist //1初始化顺序表 Status InitList(SqList &L) { L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if(!L.elem) { exit(OVERFLOW); } L.length=0;//长度为0 L.listsize=LIST_INIT_SIZE; return OK; } //6向顺序表插入数据元素 Status ListInsert(SqList &L,int i, ElemType e) { if(i<1||i>L.length+1) { return ERROR; } if (L.length>=L.listsize) { ElemType * newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT )*sizeof(ElemType)); if(!newbase) { exit(OVERFLOW); } L.elem=newbase; L.listsize+=LISTINCREMENT; } 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 nizhi(SqList &L) { for(int i=0;i<L.length/2;i++) { int temp; temp=L.elem[i]; L.elem[i]=L.elem[L.length-1-i]; L.elem[L.length-1-i]=temp; } } int main() { SqList La; InitList(La); ElemType e; int na; cout<<"请输入La中数据的个数:"; cin>>na; for(int i=1;i<=na;i++) { cin>>e; ListInsert(La,i,e); } nizhi(La);//调用逆置函数 for(i=0;i<La.length;i++) { cout<<La.elem[i]<<","; } cout<<endl; return 0; }</span>
输入数据为:顺序表的个数为10
输入的数据元素为:0 1 2 3 4 5 6 7 8 9
输出的结果为:
原文:http://blog.csdn.net/erlian1992/article/details/45169375