顺序表管理正负数

思路:设置两个指示器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 100
typedef 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>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值