|
|
#3
2010-05-18 18:15
下面的希望给你一些启示,每种操作都以先排好序为前提.
#include <stdio.h>
#define maxsize 100
typedef struct List
{
int data[maxsize];
int length;
}SqList;
SqList Initlist()
{
SqList L;
L.length=0;
return L;
}
SqList Invert(SqList L,int i,int x)
{
int j;
if(i<1||i>L.length+1)
{
printf("Error");return;
}
else if(i==L.length+1)
{
L.data[L.length]=x;
L.length++;
}
else
{
for(j=L.length;j>i-1;j--)
L.data[j]=L.data[j-1];
L.data[i-1]=x;
L.length++;
}
return L;
}
SqList Order(SqList L)
{
int i,j,k,x;
for(i=1;i<L.length;i++)
{
if(L.data[i]<L.data[i-1])
{
j=0;
while(L.data[j]<L.data[i]) j++;
x=L.data[i];
for(k=i-1;k>=j;k--) L.data[k+1]=L.data[k];
L.data[j]=x;
}
}
return L;
}
SqList Delete(SqList L,int i)
{
int k;
for(k=i;k<L.length;k++)
{
L.data[k]=L.data[k+1];
}
L.length--;
return L;
}
SqList Search(SqList L,int x)
{
int i;
i=0;
if(x>L.data[L.length-1])
printf("False!");
else
{
while(L.data[i]<x) i++;
if(L.data[i]==x)
{
printf("True!Place: %d ",i+1);
L=Delete(L,i);
}
else printf("False");
}
return L;
}
void printlist(SqList L)
{
int i;
for(i=0;i<L.length;i++)
printf("%d ",L.data[i]);
printf("\n");
}
int main()
{
SqList L;int x;
int i=1;
L=Initlist();
scanf("%d",&x);
while(x!=2012)
{
L=Invert(L,i,x);
i++;
scanf("%d",&x);
}
printlist(L);
L=Order(L);
printlist(L);
scanf("%d",&x);
scanf("%d",&i);
L=Invert(L,i,x);
printlist(L);
L=Order(L);
printlist(L);
scanf("%d",&x);
L=Search(L,x);
printf("\n");
printlist(L);
return 0;
}
|