顺序表管理正负数

来源:互联网 发布:淘宝外围活动通过了 编辑:程序博客网 时间:2024/05/03 14:28
思路:设置两个指示器i和j,分别扫描顺序表中的元素,i和j分别从顺序表的左端和右端扫描。如果i遇到小于等于0的元素,略过不处理,继续向前扫描;若遇到大于0的元素暂停元素。同理j相反。
<span style="font-size:18px;"><span style="font-size:18px;">#include<stdio.h>#include<stdlib.h>#define ListSize 100typedef int DataType;typedef struct{ DataType list[ListSize]; int length;}SeqList;void InitList(SeqList  *L){ L->length=0;}int GetElem(SeqList L,int i,DataType *e){ if(i<1||i>L.length)  return -1;  *e=L.list[i-1];  return 1;}int InsertList(SeqList *L,int i,DataType e){ int j; if(i<1||i>L->length+1) {  printf("插入位置i不合法!\n");  return -1; } else if(L->length>=ListSize) {  printf("顺序表已满,不能插入元素。\n");  return 0; } else {  for(j=L->length;j>=i;j--)  L->list[j]=L->list[j-1];  L->list[i-1]=e;  L->length=L->length+1;  return 1; }}void SplitSeqList(SeqList *L){  int i,j;  DataType e;  i=0,j=(*L).length-1;  while(i<j)  {   while(L->list[i]<=0)   i++;   while(L->list[j]>0)   j--;   if(i<j)   {    e=L->list[i];    L->list[i]=L->list[j];    L->list[j]=e;   }  } }void SplitSeqList(SeqList *L);int main(){ int i,flag,n; DataType e; SeqList L; int a[]={-12,3,-6,-10,20,-7,9,-20}; InitList(&L); n=sizeof(a)/sizeof(a[0]); for(i=1;i<=n;i++) {  if(InsertList(&L,i,a[i-1])==0)  {   printf("位置不合法");   return 0;   } } printf("顺序表中的元素:\n"); for(i=1;i<=L.length;i++) {  flag=GetElem(L,i,&e);  if(flag==1)  printf("%4d",e); } printf("\n"); printf("顺序表L调整后:\n"); SplitSeqList(&L); for(i=1;i<=L.length;i++) {  flag=GetElem(L,i,&e);  if(flag==1)  printf("%4d",e); } printf("\n");} </span></span>

0 0