已知在一维数组A[m+n]中一次存放两个线性表(a1,a2...an)和(b1,b2...bn)。试编写一个函数,将数组中两个顺序表的位置互换,即将(b1,b2...bn)放在(a1,a2..an)的前面。//王道的不对
#include<iostream>
#include<stdlib.h>
#define Size 13
using namespace std;
typedef struct Table {
int* head;
int length;
int size;
}table;
table InitTable()
{
table t;
t.head = (int*)malloc(Size * sizeof(int));
if (!t.head)
{
printf("创建空间失败");
return t;
}
t.length=0;
t.size = Size;
return t;
}
void reverse1Table(table &t)
{
for (int i = t.size-1; i >= 0; i--)
{
cin >> t.head[i];
t.length++;
}
}
void reverse2Table(table& t,int m,int n)
{
int mid = (n-m+1) / 2;
for (int i = 0; i < mid; i++)
{
int temp=t.head[m-1+i];
t.head[m-1+i] = t.head[n - 1 - i];
t.head[n- i - 1] = temp;
/*printf("m-1+i=%d n-1-i=%d\n", m + i - 1, n - i - 1);
for (int i = 0; i < t.length; i++)
{
printf("t.head[%d] = %d ", i, t.head[i]);
}
printf("\n");
*/
}
}
void ExchangeTable(table& t, int m, int n)
{
reverse2Table(t, m, n);
reverse2Table(t, m, (m+n)/2);
reverse2Table(t, (m + n) / 2+1,n);
}
void displayTable(table t)
{
for (int i = 0; i < t.length; i++)
{
printf("%d ",t.head[i]);
}
printf("\n");
}
int main()
{
table t;
t = InitTable();
for (int i = 0; i<t.size; i++)
{
t.head[i] = i + 1;
t.length++;
}
displayTable(t);
printf("请输入要反转的两个位置:\n");
//reverse1Table(t);
// displayTable(t);
int m, n;
cin >> m >> n;
// reverse2Table(t,m,n);
ExchangeTable(t, m, n);
displayTable(t);
return 0;
}