题目:设有一个元素类型为整型的栈S,设计一个算法,借助另一个栈实现把该栈的所有元素从栈顶到栈底按从小到大次序排列起来
代码展示:(注意来回倒时候终止条件)
void SortByAnotherStack(Stack &S1,Stack &S2)
{
if(S1.top==-1 || S1.top==0) return;
int t,temp;
while(S1.top>=0)
{
Pop(S1,t);
if(S2.top==-1)
{
Push(S2,t);
continue;
}
temp = t;
int flag = S1.top;
if(temp>S2.data[S2.top])
{
while(temp>S2.data[S2.top])
{
int k;
Pop(S2,k);
Push(S1,k);
if(S2.top==-1)break;
}
Push(S2,temp);
}
else
{
Push(S2,temp);
}
while(S1.top>flag)
{
int m;
Pop(S1,m);
Push(S2,m);
}
}
}
题目:设一个栈的输入序列为1,2,3…n,编写算法,判断序列,p1,p2,…pn是否是合理的栈输出序列
代码展示:
bool IsTureReverse(Stack &S,int *arr)
{
if(ArrLength>S.top+1)
{
return 0;
}
int i = 0;
int x;
while(S.top>=0)
{
if(S.data[S.top]!=arr[0])
{
Pop(S,x);
}
else
{
break;
}
}
if(S.top==-1)
{
return 0;
}
else
{
while(i<ArrLength)//此处ArrLength采用宏定义
{
if(S.data[S.top]==arr[i])
{
Pop(S,x);
i++;
}
else
{
return 0;
}
}
return 1;
}
}
题目:输入一个正整数数组,将数组中的各整数连接排成一个大整数,输出能排出的所有整数中最小的一个
代码展示:
int bi(int x)
{
int i=0;
while(x)
{
x=x/10;
i++;
}
return i;
}
int ex(int p,int x)
{
int i,s=1;
for(i=1;i<=x;i++)
s=s*p;
return s;
}
void min(int *A,int n)
{
for(int i=0; i<n; i++)
{
for(int j=0; j<n-i-1; j++)
{
int m=bi(A[j]);
int l=bi(A[j+1]);
if(A[j]*ex(10,l)+A[j+1] > A[j+1]*ex(10,m)+A[j])
{
int temp=A[j];
A[j]=A[j+1];
A[j+1]=temp;
}
}
}
for(int i=0; i<n; i++)
{
printf("%d",A[i]);
}
}
int main()
{
int arr[] = {1,43,2,56,7,10};
min(arr,6);
}
题目:给定一个整数的一维数组A[n],将其中所有整数循环左移p个位置
代码展示:
void reverse(int *arr,int i,int j)
{
while(i<j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;j--;
}
}
reverse(arr,0,p-1);
reverse(arr,p,n-1);
reverse(arr,0,n-1);
题目:设整数序列用数组存,设计算法把所有小于X1的放在前面,大于X2的放在后面,两者之间的放中间
代码展示:
void dispose(int *arr,int n,int X1,int X2)
{
int i = 0; int j = n-1; int k = 0;
while(i<j)
{
while(arr[i]>=X1 && arr[i]<=X2)
{
i++;
}
if(arr[i]<X1)
{
int temp = arr[i];
arr[i] = arr[k];
arr[k] = temp;
k++;i++;
}
if(arr[i]>X2)
{
int temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
j--;
}
}
}