学了就要做笔记
**
哨兵查找法
**
哨兵查找法 -适用于无序查找
#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;
}