1、设线性表的数据元素都为整数,存放在顺序表S中且递增有序。设计算法,将x插入到顺序表S的适当位置上,以保持线性表的有序性。
2、线性表使用顺序表作存储结构,设计算法,仅用一个辅助结点,实现将顺序表中的结点循环右移k位的运算。
3、设计算法,仅用一个辅助结点,实现将顺序存储的线性表中的数据元素逆置。
#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;
const int MAX=500;
typedef struct
{
int *elem;
int lenth;
}SqList;
int InitList(SqList &L)
{
L.elem=new int[MAX];
if(!L.elem) exit(0);
L.lenth=0;
return 1;
}
void print(SqList &L)
{
for(int i=0;i<L.lenth;i++)
cout<<L.elem[i]<<" ";
}
void InSertList(SqList &L)
{
if(L.lenth==MAX)
{
printf("内存已满!");
exit(0);
}
cout<<"\n请输入要插入的数字:";
int e,ll=L.elem[L.lenth-1];
cin>>e;
if(ll<e)
{
L.elem[L.lenth]=e;
L.lenth++;
}
for(int i=0;i<L.lenth;i++){
if(e<=L.elem[i]){
for(int j=L.lenth;j>i;j--){
L.elem[j]=L.elem[j-1];
}
L.lenth++;
L.elem[i]=e;
break;
}
}
cout<<"插入成功!"<<endl;
}
void move(SqList &L,int a)
{
int i,j,k;
a=a%L.lenth;
for(i=0;i<a;i++)
{
k=L.elem[L.lenth-1];
for(j=L.lenth-1;j>=0;j--)
{
L.elem[j]=L.elem[j-1];
}
L.elem[0]=k;
}
}
void NZ(SqList &L)
{
int q=L.lenth/2;
int *p=L.elem;
for(int i=0;i<q;i++)
{
int temp;
temp=L.elem[i];
L.elem[i]=L.elem[L.lenth-i-1];
L.elem[L.lenth-i-1]=temp;
}
}
int main()
{
int n,m;
SqList L;
InitList(L);
cout<<"输入表长:"<<endl;
cin>>n;
cout<<"输入数据:"<<endl;
for(int i=0;i<n;i++)
cin>>L.elem[i];
L.lenth=n;
InSertList(L);
print(L);
cout<<endl;
cout<<"输入循环次数:";
cin>>m;
move(L,m);
print(L);
cout<<endl;
cout<<"逆置:";
NZ(L);
print(L);
return 0;
}