编写一个算法将顺序表A分成两部分,大于0 的在A的左边,小于0的在A的右边

来源:互联网 发布:网络电视播放器排行 编辑:程序博客网 时间:2024/04/29 08:11

#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 ListEmpty(SeqList L)
{
if(L.length = 0)
return 1;
else
return 0;
}


int GetElem(SeqList L,int i,DataType * e)
{
//查找顺序表中第i个元素,查找成功将该值返回给e,并返回1表示成功,否则返回-1,表示失败

//步骤1:首先判断你要查找的元素位置是否合法

if(i<1 || i>L.length)

return -1;

 

*e = L.list[i-1];
return 1;

 

 

}


int LocateElem(SeqList L,DataType e)
{
//查找顺序表中元素值为e的元素,查找成功将对应的序号返回,否则返回0表示失败
int i;
for(i = 0;i<L.length;i++)

if(L.list[i] == e)

return i;

 

return 0;

 

}


int InsertList(SeqList *L,int i,DataType e)
{
//在顺序表的第i个位置插入元素e,插入成功返回1,插入位置不合法返回-1,顺序表满返回0
int j;
if(i <1 || i>L->length+1)
{
printf("插入位置i不合法!\n");
return -1;
}
//在插入元素前首先判断顺序表是否已经满
else if(L->length == LISTSIZE)
{
printf("顺序表已经满,不能插入元素。\n");
return 0;
}
else
{
//1:将第i位置一次往后移动
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;

 

}

 


}


int DeleteList(SeqList *L,int i,DataType *e)
{
int j;
if(L->length <= 0)
{
printf("顺序表已经空,不能进行删除!\n");
return 0;


}else if(i <1 ||i>L->length)
{
printf("删除的位置不对!\n");
return -1;

}else{

*e = L->list[i -1];
for(j = i;j<= L->length -1;j++)
{
L->list[j-1] = L->list[j];


}
L->length = L->length -1;
return 1;


}

 

 

 


}


int ListLength(SeqList L)
{
return L.length;

 


}


void ClearList(SeqList *L)
{
L->length = 0;

 


}

void SplitSeqList(SeqList *L)
{
 //调整顺序表,使元素的左边是大于等于的0的元素,右边是小于0 的元素
 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 main()
{
 int i,flag,n;
 DataType e;
 SeqList L;
 int a[] = {-7,0,5,-8,9,-4,3,-2};
 InitList(&L);
 n = sizeof(a)/sizeof(a[0]);


 for(i = 1;i<=n;i++)
 {
  if(InsertList(&L,i,a[i-1]) == 0)
  {
   printf("位置不合法");
   return ;
  }
 }

 for(i=1;i<=L.length;i++)
 {
  flag = GetElem(L,i,&e);
  if(flag == 1)
 
   printf("%4d",e);
 }

 printf("\n");
 printf("调整后输出:\n");
 SplitSeqList(&L);
 for(i = 1;i<=L.length;i++)
 {
  flag = GetElem(L,i,&e);
  if(flag == 1)
  {
   printf("%4d",e);
  }

 
 }
 printf("\n");


}

 

 

 

 

 

 

 

 

 

 

 

 

 


 

0 0
原创粉丝点击