编写C语言程序【,从一个已排序的数组中删去某数后,该数组仍然有序】,,必须要可以运行的呀!

如题所述

删除数组中的某个元素,可以采取将删除位置之后的元素依次向前移动一位的办法来实现。

#include <stdio.h>

#define LEN 100 /*数组长度*/
#define elemType int /*元素类型*/


/*打印数组*/
void printArr (elemType arr[], int len) {
int i;
for (i=0; i<len; i++)
printf ("%-4d",arr[i]);
putchar ('\n');
}

/*删除index号元素*/
void delElem (elemType arr[], int *len, int index) {
int i;
for (i=index; i<*len; i++)
arr[i]=arr[i+1];
*len-=1;
}

int main (void) {
elemType arr[LEN] = {1,2,3,4,5,6,7,8,9,10};
int len = 10;
int delIndex = 4; /*删除4号元素*/
int i;

puts ("原数组:");
printArr (arr, len);
putchar ('\n');
puts ("================================================================\n");

delElem (arr, &len, delIndex);
printf ("删除%d号元素后数组:\n",delIndex);
printArr (arr, len);
putchar ('\n');

fflush (stdin); /*清除缓冲区*/
getch (); /*屏幕暂留*/
return 0;
}

运行结果

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-08-25
#include <stdio.h>
void fun(int *arr,int N,int dat)
{
int i,add=0,num=0;

for(i=0;i<N;i++)
{
if(arr[i]==dat)
{

if(add==0) add = i;
num++;
}

}
if(num>0) 
{
memcpy(arr+add,arr+add+num,(N-add-num)*sizeof(arr[0]));
memset(arr+N-num,0,num*sizeof(arr[0]));
}
}
void main(void)
{
int a[20]={1,2,3,3,5,6,7,8,9};
int i;

  for(i=0;i<9;i++)
  printf("%d  ",a[i]);
  printf("\r\n");

 fun(a,9,3);

  for(i=0;i<9;i++)
  printf("%d  ",a[i]);
  printf("\r\n");
}

int类型数组,假如类型是unsigned char的数组,你就得改程序了,

第2个回答  2017-07-21
完成 建一个cpp文件放代码进去就可以了
//从一个已排序的数组中删去某数后,该数组仍然有序,必须要可以运行的呀!
#include"stdio.h"
#include"conio.h"
#define MAX 100

typedef int datatype ;//默认数组类型是int 其他类型修改这里
int count = 0 ;

void sort(datatype*);
void input(datatype*);
void sdelete(datatype*) ;
void out(datatype*) ;

int main(void)
{
datatype a[MAX] = {0} ;

input(a) ;
sort(a) ;

printf("当前数组为:");
out(a) ;
printf("\n\n按任意键进行删除");
getch();

sdelete(a);

return 0 ;
}

void sort(datatype* data)
{
int i = 0 ;
int j = 0 ;
int temp = 0 ;

for (i = count - 1; i > 0; --i){
for (j = 0; j < i; ++j){

if(data[j+1] > data[j])
{
temp = data[j];
data[j] = data[j+1];
data[j+1] = temp;
}
}
}
}

void input(datatype* data)
{
int i = 0 ;
char tempc = 'a' ;
int flag = 0 ;
int tempi = 0 ;
int space=0;

printf("请输入数组 以空格隔开 回车结尾:") ;
fflush(stdin) ;

while((tempc=getchar())!='\n'){
if (tempc==' '){
data[space] = tempi ;
count++ ;
space++;

tempi = 0 ;
flag = 0 ;
}

else{
flag = 1 ;
tempi = tempi*10 + (tempc-48) ; // 将字符数字C转换为实际数字C
}
}

if(flag){//如果回车键之前为非空格,则该数也要存入数组
data[space] = tempi ;
count++ ;
}
}

void out(datatype* data)
{
int i = 0 ;
for(i=0;i<count;i++){
printf("%d ",data[i]) ;
}
}

void sdelete(datatype* data)
{
datatype flag ;
int i = 0 ;
int j = 0 ;
while(1){
printf("\n输入删除的数字 输入555退出:");
fflush(stdin) ;

scanf("%d",&flag) ;
if(flag == 555){
break ;
}
for(i=0;i<count;i++){
if(data[i] == flag){
for(j=i; j<count;j++){
data[j] = data[j+1] ;
count -- ;

printf("\n删除后:");
out(data);
}
}
}
}
}
第3个回答  2012-11-22
#include<stdio.h>
void main()
{
int array[10]={1,2,3,4,5,6,7,8,9,10};
int i,m,j;
printf("请插入要删除的元素:\n");
scanf("%d",&m);
for(i=0;i<10;i++)
{
if(array[i]==m)
{for(j=i;j<10;j++)
array[j}=array[j+1];];
}
array[10]=0;
break;
}
for(i=0;i<9;i++)
printf("%3d",array[i]);
}本回答被网友采纳
第4个回答  2012-11-22
从已排序的数组中删除某数之后难道还会乱序吗?不是肯定还是有序的吗

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网