C语言笔记28 •顺序表经典算法OJ题•

1.删除数组中指定的元素

//算法实现

int removeElement(int* nums, int numsSize, int val)
{
    int src = 0;//nums[src] == val src++
    int dst = 0;///nums[src] != val src++  dst++
    while(src< numsSize)
    {
        if (nums[src] == val)
        {
            src++;
        }
        else 
        {
            nums[dst] = nums[src];
            src++;
            dst++;
        }
    }
    return dst;//删除了val的值  返回新数组的有效长度

2.合并两个升幂有序数组

//算法实现
void merge(int* nums1, int m, int* nums2,  int n)//对两个递增数组进行排序
{
    int L1 = m - 1;
    int L2 = n - 1;
    int L3 = m + n - 1;
    while (L1 >= 0 && L2 >= 0)//只要有一个小于0就跳出循环
    {
        if (nums1[L1] > nums2[L2])
        {
            nums1[L3--] = nums1[L1--];
        }
        else
        {
            nums1[L3--] = nums2[L2--];
        }
    }
    while (L2 >= 0) //此情况说明L2中还有剩余数据 需要依次放到num1中
    {
        nums1[L3--] = nums2[L2--];
    }
}

3.代码测试


#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <ctype.h>
#include <windows.h>


//1.删除数组中指定的元素
int removeElement(int* nums, int numsSize, int val)
{
	int src = 0;//nums[src] == val src++
	int dst = 0;///nums[src] != val src++  dst++
	while(src< numsSize)
	{
		if (nums[src] == val)
		{
			src++;
		}
		else 
		{
			nums[dst] = nums[src];
			src++;
			dst++;
		}
	}
	return dst;//删除了val的值  返回新数组的有效长度
}
int main()
{
	int arr[] = { 1,2,3,4,1,2,1 };
	int size = sizeof(arr) / sizeof(arr[0]);
	for (int i = 0; i <size; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");
	int num = removeElement(arr, size, 1);
	for (int i = 0; i < num; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

//2.合并两个升幂有序数组
void merge(int* nums1, int m, int* nums2,  int n)//对两个递增数组进行排序
{
	int L1 = m - 1;
	int L2 = n - 1;
	int L3 = m + n - 1;
	while (L1 >= 0 && L2 >= 0)//只要有一个小于0就跳出循环
	{
		if (nums1[L1] > nums2[L2])
		{
			nums1[L3--] = nums1[L1--];
		}
		else
		{
			nums1[L3--] = nums2[L2--];
		}
	}
	while (L2 >= 0) //此情况说明L2中还有剩余数据 需要依次放到num1中
	{
		nums1[L3--] = nums2[L2--];
	}
}
int main()
{
	int arr1[6] = { 4,5,6, };
	int arr2[3] = { 1,2,3, };
	for (int i = 0; i < 3; i++)
	{
		printf("%d ", arr1[i]);
	}
	printf("\n");
	merge(arr1, 3, arr2, 3);
	for (int i = 0; i < 6; i++)
	{
		printf("%d ", arr1[i]);
	}
	return 0;
}

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值