创建一顺序表实现顺序表的逆置,查找,相同元素的删除和合并
答案:1 悬赏:0 手机版
解决时间 2021-03-20 10:59
- 提问者网友:伴风望海
- 2021-03-19 22:38
创建一顺序表实现顺序表的逆置,查找,相同元素的删除和合并
最佳答案
- 五星知识达人网友:醉吻情书
- 2021-03-19 23:29
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
//输出
void output(int *arr,int size);
//反序
void Reverse(int *arr,int size);
//查找,返回找到的下标号,没找到时返回-1
int Find(int *arr,int size,const int findWhat);
//删除相同元素,线性表实际上不能真正删除数据,所以size返回剔除后的真正大小
void DeleteSame(int *arr,int *size);
int main(void)
{
int arr[10] = {3,2,7,9,4,5,8,3,9,0};
//输出
output(arr,10);
//反序
Reverse(arr,10);
//输出
output(arr,10);
//查找 数字8
int position = Find(arr,10,8);
printf("8 is at [%d] position\n",position);
//删除相同的值
int size = 10;
DeleteSame(arr,&size);
//输出 删除相同值后大小为size返回
output(arr,size);
getchar();
return 0;
}
//输出
void output(int *arr,int size)
{
int i = 0;
for ( i = 0 ; i < size ; i++ )
{
printf("%d ",*arr);
arr++;
}
printf("\n");
}
//反序
void Reverse(int *arr,int size)
{
int *pArrStart = arr;
int *pArrEnd = arr + size - 1;
while ( pArrStart < pArrEnd )
{
int tmp = *pArrStart;
*pArrStart = *pArrEnd;
*pArrEnd = tmp;
pArrStart++;
pArrEnd--;
}
}
//查找,返回找到的下标号,没找到时返回-1
int Find(int *arr,int size,const int findWhat)
{
int i = 0;
for ( i = 0 ; i < size ; i++ )
{
if ( arr[i] == findWhat )
{
return i;
}
}
return -1;
}
//删除相同元素,线性表实际上不能整整删除数据,所以size返回剔除后的真正大小
void DeleteSame(int *arr,int *size)
{
int *pCurrent = arr;
while ( pCurrent < arr + *size )
{
int *pWork = pCurrent + 1;
while ( pWork < arr + *size )
{
if ( *pCurrent == *pWork )
{
*size = *size - 1;
memmove(pWork,pWork+1,arr+*size-pWork);
}
pWork++;
}
pCurrent++;
}
}
#include <stdlib.h>
#include <memory.h>
//输出
void output(int *arr,int size);
//反序
void Reverse(int *arr,int size);
//查找,返回找到的下标号,没找到时返回-1
int Find(int *arr,int size,const int findWhat);
//删除相同元素,线性表实际上不能真正删除数据,所以size返回剔除后的真正大小
void DeleteSame(int *arr,int *size);
int main(void)
{
int arr[10] = {3,2,7,9,4,5,8,3,9,0};
//输出
output(arr,10);
//反序
Reverse(arr,10);
//输出
output(arr,10);
//查找 数字8
int position = Find(arr,10,8);
printf("8 is at [%d] position\n",position);
//删除相同的值
int size = 10;
DeleteSame(arr,&size);
//输出 删除相同值后大小为size返回
output(arr,size);
getchar();
return 0;
}
//输出
void output(int *arr,int size)
{
int i = 0;
for ( i = 0 ; i < size ; i++ )
{
printf("%d ",*arr);
arr++;
}
printf("\n");
}
//反序
void Reverse(int *arr,int size)
{
int *pArrStart = arr;
int *pArrEnd = arr + size - 1;
while ( pArrStart < pArrEnd )
{
int tmp = *pArrStart;
*pArrStart = *pArrEnd;
*pArrEnd = tmp;
pArrStart++;
pArrEnd--;
}
}
//查找,返回找到的下标号,没找到时返回-1
int Find(int *arr,int size,const int findWhat)
{
int i = 0;
for ( i = 0 ; i < size ; i++ )
{
if ( arr[i] == findWhat )
{
return i;
}
}
return -1;
}
//删除相同元素,线性表实际上不能整整删除数据,所以size返回剔除后的真正大小
void DeleteSame(int *arr,int *size)
{
int *pCurrent = arr;
while ( pCurrent < arr + *size )
{
int *pWork = pCurrent + 1;
while ( pWork < arr + *size )
{
if ( *pCurrent == *pWork )
{
*size = *size - 1;
memmove(pWork,pWork+1,arr+*size-pWork);
}
pWork++;
}
pCurrent++;
}
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯