C语言,怎么在一轮循环中删除顺序表中多个负数

Python012

C语言,怎么在一轮循环中删除顺序表中多个负数,第1张

采用前移法,或者重建法都可以。

1.前移法就是 while循环遍历顺序表,如果是负数,计数count++,如果是正数,前移count个单位(说明前面有count个负数)。

2.重建法就是如果是正数,count++(这里我count初始化为-1),前移到count的位置,负数不做处理。

最后通过length截断顺序表即可。

#include <stdio.h>

#define MAXSIZE 100

typedef struct{

int elem[MAXSIZE] 

int last

} SeqList

void deletelist(SeqList *l,int i,int k)

int main(){  

int i,k,j=0

SeqList *l

SeqList a

l=&a 

scanf("%d%d",&i,&k)//输入i和k

while(scanf("%d",&l->elem[j])!=EOF)

j++//输入顺序表内容

l->last=j-1

deletelist(l,i,k) 

return 0

扩展资料

顺序表插入元素

向已有顺序表中插入数据元素,根据插入位置的不同,可分为以下 3 种情况:

1、插入到顺序表的表头;

2、在表的中间位置插入元素;

3、尾随顺序表中已有元素,作为顺序表中的最后一个元素;将要插入位置元素以及后续的元素整体向后移动一个位置;将元素放到腾出来的位置上。

注意,动态数组额外申请更多物理空间使用的是 realloc 函数。并且,在实现后续元素整体后移的过程,目标位置其实是有数据的,还是 3,只是下一步新插入元素时会把旧元素直接覆盖。

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define MaxSize 50

#define len(x) sizeof(x)/sizeof(x[0])

typedef struct SqList

{

int data[MaxSize]

int length

}SqList

static SqList Create(int a[],int n)//用一个数组创建静态顺序表

static void Print(SqList L)//打印一个静态顺序表

static void ListInsert(SqList *p,int i,int e)//L的第i个位置插入e

static void ListDelete(SqList *p,int i)//删除列表第i个数据

static int LocateElem(SqList L,int e)//查找第一个值等于e的元素,返回其位序

static void Reverse(SqList *p,int left,int right)//逆置表的第left到right的元素顺序

/*递增序列折半查找等于e的元素,返回其位序*/

static int Binsearch(SqList L,int e)

int main()

{

int a[]={1,2,3,4}

SqList L=Create(a,len(a))

ListInsert(&L,2,100)

ListDelete(&L,2)

Reverse(&L,1,4)

Print(L)

printf("%d\n",Binsearch(L,2))

}

static SqList Create(int a[],int n)

{

SqList L

int i

L.length=n

for(i=0i<L.lengthi++)

L.data[i]=a[i]

return L

}

static void Print(SqList L)

{

int i

for(i=0i<L.lengthi++)

printf("%d ",L.data[i])

printf("\n")

}

static void ListInsert(SqList *p,int i,int e)

{

int j

if(i<1 || i>p->length+1)

{printf("错误范围\n")}

if(p->length>=MaxSize)

{printf("存储空间已满\n")}

for(j=p->lengthj>=ij--)

p->data[j]=p->data[j-1]

p->data[i-1]=e

p->length++

}

static void ListDelete(SqList *p,int i)

{

if(i<1 || i>p->length)

{printf("删除范围出错\n")return}

while(i<p->length)

{

p->data[i-1]=p->data[i]i++

}

p->length--

}

static int LocateElem(SqList L,int e)

{

int i

for(i=0i<L.lengthi++)

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

return i+1

return 0

}

static void Reverse(SqList *p,int left,int right)

{

int temp

if(left>right || left<1 || right>p->length)

{printf("错误的输入\n")return}

for(left--,right--left<rightleft++,right--)

{

temp=p->data[left]

p->data[left]=p->data[right]

p->data[right]=temp

}

}

static int Binsearch(SqList L,int e)

{

int mid,low=0,high=L.length-1

while((low+1)!=high)

{

mid=(low+high)/2

if(L.data[mid]==e) return mid+1

if(e<L.data[mid]) high=mid

if(e>L.data[mid]) low=mid

}

return 0

}

ListInsert 和 ListDelete 为你所要的函数