回 帖 发 新 帖 刷新版面

主题:顺序表问题 输出出错

要求以第k个元素为标准小于第k个元素的放在1——k之前 
 大于的放在后面
#define MAXSIZE 100 
typedef int datatype; 
typedef struct 
{datatype data[MAXSIZE]; 
  int last;  
 }SeqList; 

 void  input(SeqList *L) 
{int i,x; 
 i=1; 
printf("please input x="); 
scanf("%d",&x); 
while(x!=-1) 
  { L->data[i]=x;i++; 
if(i==MAXSIZE)printf("the list is overflow"); 
else  scanf("%d",&x); 

L->last=i-1; 

void output(SeqList *L) 
{int i; 
 printf("the data of SeqList is:"); 
for(i=1;i<=L->last;i++) 
  printf("%d ",L->data[i]); 

 void part_SeqList(SeqList *L,int k) 
    { int i,j; 
       datatype x,y; 
        x=L->data[k]; 
          for(i=1;i<=k;i++) 
            if(L->data[i]>x) 
             { y=L->data[i]; 
                 for(j=L->last;j>=k+1;j--) 
                  L->data[j+1]=L->data[j]; 
                    L->data[k+1]=y; 
                     L->last++; 
               } 
         for(i=k;i<=L->last;i++) 
          if(L->data[i]<x) 
          {y=L->data[i]; 
             for(j=i-1;j>=k;j--) 
               L->data[j+1]=L->data[j]; 
                 L->data[k]=y; 
           } 
             } 


main() 
{SeqList L; 
 int k,j; 
input(&L); 
    printf("please input k="); 
      scanf("%d",&k); 
      printf("L->data[k]=%2d",L.data[k]); 
       printf("\n"); 
part_SeqList(&L,k); 
 output(&L); 

getch(); 
 }

回复列表 (共1个回复)

沙发

程序和移位正确,不过在顺序表里所有的数据都要移动,不是靠顺序表的长度加和减解决的!
例如:
7 1 3 5 10 2 8 9
如果定义第四个元素基准,小于5的元素在左边,大于5的元素在右边那么,左边的元素要移动,右边的元素也要移动,不是表长可以解决的
例:
7 1 3 5 10 2 8 9第一次取7>5那么1,3要向前移10,2,8,9向后移7插入5和10之间那么就是7,1,3,5,7,10,2,8,9此时表长是加了1但首元素没有移动导致错误,把7插入第四个位置后,再把所有的元素再向前一次就行了!用你的程序运行了一下,首元素根本未动过^_^

我来回复

您尚未登录,请登录后再回复。点此登录或注册