问题描述:将一个线性表逆置,即:
输入1 2 3 4 5 6;
输出6 5 4 3 2 1;
#include <iostream>
#include <cstdlib>
using namespace std;
typedef int elemtype;
typedef struct{
elemtype* elem;
int listsize;
int length;
}sqlist;
void create_L(sqlist& L){
L.elem=(elemtype*)malloc(1000*sizeof(elemtype));
L.listsize=1000;
L.length=0;
}
void show(sqlist& L){
for(int i=0;i<L.length;i++){
cout<<L.elem[i]<<" ";
}
cout<<endl;
}
void nizhi(sqlist& L){
#include <iostream>
#include <cstdlib>
using namespace std;
typedef int elemtype;
typedef struct{
elemtype* elem;
int listsize;
int length;
}sqlist;
void create_L(sqlist& L){
L.elem=(elemtype*)malloc(1000*sizeof(elemtype));
L.listsize=1000;
L.length=0;
}
void show(sqlist& L){
for(int i=0;i<L.length;i++){
cout<<L.elem[i]<<" ";
}
cout<<endl;
}
void nizhi(sqlist& L){
//法一,遍历半个数组,前后交换 :从前向后遍历L.elem[i]与L.elem[L.length-1-i]交换,与法二大同小异
/* for(int i=0;i<L.length/2;i++){
int t;
t=L.elem[i];
L.elem[i]=L.elem[L.length-1-i];
L.elem[L.length-1-i]=t;
}*/
/* for(int i=0;i<L.length/2;i++){
int t;
t=L.elem[i];
L.elem[i]=L.elem[L.length-1-i];
L.elem[L.length-1-i]=t;
}*/
//法二,记录数组的下标法:记录数组的下标,一个向后走,一个向前走,直至相等,否则就交换
int low=0;
int high=L.length-1;
while(low<high){
int t=L.elem[low];
L.elem[low]=L.elem[high];
L.elem[high]=t;
low++;
high--;
}
}
void fuzhi(sqlist& L,int n){
cout<<"请输入线性表的元素";
int m;
for(int i=0;i<n;i++){
cin>>m;
L.elem[i]=m;
L.length++;
}
}
int main(){
sqlist l;
create_L(l);
fuzhi(l,5);
show(l);
nizhi(l);
show(l);
return 0;
}
int low=0;
int high=L.length-1;
while(low<high){
int t=L.elem[low];
L.elem[low]=L.elem[high];
L.elem[high]=t;
low++;
high--;
}
}
void fuzhi(sqlist& L,int n){
cout<<"请输入线性表的元素";
int m;
for(int i=0;i<n;i++){
cin>>m;
L.elem[i]=m;
L.length++;
}
}
int main(){
sqlist l;
create_L(l);
fuzhi(l,5);
show(l);
nizhi(l);
show(l);
return 0;
}