哨兵查找法与杨辉三角与插入删除算法

学了就要做笔记
**

哨兵查找法

**
哨兵查找法 -适用于无序查找

#include <stdio.h>
#define N 5
int NeedFindNumber();

int main()
{
	int i = 0;//i来代表数组下标
	int arr[N + 1] = {1, 2, 3, 4, 5}; //在数组在加一个元素使数组中最后一个元素当哨兵
	int needFindNum = 0;
	for(i = 0; i < N; i++)
    {
        printf("%d ", *(arr + i));
    }
    printf("\n");
	needFindNum = NeedFindNumber();
	//将用户要查找的数组赋给数组中的哨兵
	arr[N] = needFindNum;//使得数组中一定有要查找的数
	for(i = 0; needFindNum != arr[i]; i++)//如果要查找的数与数组中的元素不相等 i就加一
	{
		//在哨兵数之前找到了就会退出循环
		continue;
	}
	if(i == N)//如果i等于哨兵数的下标 那么没找到
	{
		printf("Don\'t find\n");
	}
	else//找到了
	{
		printf("The %d at %d\n", needFindNum, i);
	}

	return 0;
}

int NeedFindNumber()
{
	int number = 0;
	printf("please input you need find number:");
	scanf("%d", &number);
	fflush(stdin);
	return number;
}

插入删除算法

#include <stdio.h>
#include <stdlib.h>

int GetNeedIndex(); //输入要插入的数的下标
int GetNeedNumber();//输入要插入的数的值
int GetDeleteIndex();//输入要删除的数的下标
void OutputNumber(const int* numberArray, int count);//输出数组

#define N 5

int main()
{
	int i;
	int numberArray[N + 1] = {1, 2, 3, 4, 5};
	int seat = 0;		//插入位置
	int numerical = 0;	//插入的数值
	int count = N;		//当前数组中显示的元素
	OutputNumber(numberArray, count);
	//插入
	seat = GetNeedIndex();
	if(seat < 0 || seat > count)
	{
		printf("You input invalid!\n");
		return 1;
	}
	numerical = GetNeedNumber();
	for(i = count; i > seat; i--)
	{
		numberArray[i] = numberArray[i - 1];
	}
	numberArray[seat] = numerical;
	count++;
	OutputNumber(numberArray, count);
	//删除
	seat = GetDeleteIndex();
	if(seat < 0 || seat > count)
	{
		printf("You input invalid!\n");
		return 1;
	}
	for(i = seat; i < count; i++)
	{
		numberArray[i] = numberArray[i + 1];
	}
	numberArray[count] = 0;//将数组中最后一个值置零	
	count--;//减少数组显示的长度
	OutputNumber(numberArray, count);

	return 0;
}

int GetNeedIndex() //输入要插入的数的下标
{
	int userInputIndex = 0;
	printf("please input you need insert number index:");
	scanf("%d", &userInputIndex);
	fflush(stdin);
	return userInputIndex - 1;
}

int GetNeedNumber() //输入要插入的数的值
{
	int userInputNumber = 0;
	printf("please input you need insert number index:");
	scanf("%d", &userInputNumber);
	fflush(stdin);
	return userInputNumber;
}

int GetDeleteIndex() //输入要删除的数的下标
{
	int userInputIndex = 0;
	printf("please input you need delete number index:");
	scanf("%d", &userInputIndex);
	fflush(stdin);
	return userInputIndex - 1;
}

void OutputNumber(const int* numberArray, int count) //输出数组
{
	int i = 0;
	for(i = 0; i < count; i++)
	{
		printf("%d ", numberArray[i]);
	}
	printf("\n");
}

杨辉三角的打印

#include <stdio.h>
//杨辉三角
#define N 10



int main()
{
	int arr[N][N] = {{0}};
	int i = 0;
	int j = 0;
	for(i = 0; i < N; i++)
	{
		for(j = 0; j <= i; j++)
		{
			if(0 == j || j == i)
			{
				//中间与最外层都是1
				arr[i][j] = 1;
			}
			else
			{
				//杨辉三角的当前数等于上一行同一列的数加上上一行上一列的数之和
				arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
			}
		}
	}
	for(i = 0; i < N; i++)
	{
	    for(j = 0; j < N - i; j++)
        {
            printf("%-5c", ' ');
        }
		for(j = 0; j <= i; j++)
		{
			printf("%-5d", arr[i][j]);
		}
		for(j = 1; j <= i; j++)
        {
            printf("%-5d", arr[i][j]);
        }
		printf("\n");
	}
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值