编写一个算法将顺序表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");
}
- 编写一个算法将顺序表A分成两部分,大于0 的在A的左边,小于0的在A的右边
- 在一个数组中,找出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它
- 已知一个整数数组A[n],写出算法实现将奇数元素放在数组的左边,将偶数放在数组的右边。要求时间复杂度为O(n)。
- 求教一个算法,求两个数a,b的最大公约数,a,b大于0小于10的60次方,a,b从文件夹中读取。
- 将一个字符串中小于0的数字放到左边,大于0的数字放到右边
- 一个int数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它
- 一个int数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它
- 一个int数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它。
- 一个int数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它
- 一个int数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它
- 借鉴快速排序的思想,实现算法将整型数组a[0...n]分成两块,使得第一块元素均大于等于0,第二块的元素均小于0,要求算法原地工作且时间复杂度为O(n)
- 查找满足大于左边小于右边的数
- POJ1577 二叉树的创建及先序遍历(给定一些二叉树中的值,大于根的排在右边,小于根的排在左边)
- 编写函数,输出大于a小于b的所有偶数,主函数读入两个正整数
- 设计一个算法将一个线性表如何将大于0的数放在后面,小于0的放在前面。
- 链表问题---将单向链表按某值划分成左边小,中间相等,右边大的形式
- 对于一个字符串,设计一个算法,将包括i位置在内的左侧部分移动到右边,将右侧部分移动到左边。给定字符串A和它的长度n以及特点位置p,请返回旋转后的结果。
- 一个int 数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它。能否只用一个额外数组和少量其它空间实现。
- shell变量的替换
- 盘点被App Store拒绝的79个原因
- Sun JDK自带JVM内存使用分析工具HProf
- 「leetCode」:Sort List
- 人工智能:互联网巨头全产业扩张的注脚
- 编写一个算法将顺序表A分成两部分,大于0 的在A的左边,小于0的在A的右边
- 出现“XXX“列名无效,请检查列名、数据表的情况
- easyUI中,前端Pagination,数据的收不到的问题,已解决
- java调用淘宝api
- Java RandomAccessFile用法
- Android源码50例汇总,欢迎各位下载
- C#中Hashtable
- android 圆形碰撞
- 01js基础 js初步及调试