首页
社区
课程
招聘
[原创]C++ 代码整理 《Visual C++ 开发实战1200例》数据结构-数组
2021-5-17 17:38 7511

[原创]C++ 代码整理 《Visual C++ 开发实战1200例》数据结构-数组

2021-5-17 17:38
7511

C++ 代码整理

前言

    菜鸟一枚,该文章为整理学习C++ 代码,进一步熟悉C++ 语言并且用来日后复习。因为原书当中使用的编译器有点老,所以,原书当中的代码在现在的环境运行可能报错。所以多少进行了修改使其可以正常运行。下图是我使用的环境。

数据结构-数组

    向数组中赋值

#include <iostream>
using namespace std;

int main() {
	int values[10] = { 0 }; //定义数组并初始化
	for (int i = 0; i < 9; i++) {
		cin >> values[i];
	}
	for (int i = 0; i < 9; i++) {
		cout << values[i] << "\n";
	}
	return 0;
}

    遍历数组

#include <iostream>
using namespace std;

int main() {
	int i;
	float a[6];
	//遍历从键盘为数组元素赋值
	for (i = 0; i < 6; i++) {
		cout << "a[" << i << "] = ";
		cin >> a[i];
	}
	//遍历输出数组
	for (i = 0; i < 6; i++) {
		cout << a[i] << "\t";
		//控制每行输出元素个数
		if (i % 3 == 2) {
			cout << "\n";
		}
	}
	return 0;
}

    求数组中元素的平均和

#include <iostream>
using namespace std;
int main() {
	int i;
	float a[6];
	float sum = 0;
	//从键盘为数组元素赋值
	for (i = 0; i < 6; i++) {
		cout << "a[" << i << "] = ";
		cin >> a[i];
	}
	//输出数组
	for (i = 0; i < 6; i++) {
		sum += a[i];
	}
	sum = sum / 6;
	cout << "输出数组平均和:" << sum << "\n";
	return 0;
}

    数组的排序

#include <iostream>

int main() {
	int i, j, t;
	int a[7];
	//从键盘为数组元素赋值
	for (i = 0; i < 7; i++) {
		std::cout << "a[" << i << "]=";
		std::cin >> a[i];
	}
	//从小到大排序
	for (i = 0; i < 6; i++) {
		for (j = i + 1; j < 7; j++) {
			if (a[i] > a[j]) {
				t = a[i];
				a[i] = a[j];
				a[j] = t;
			}
		}
	}
	//输出数组
	for (i = 0; i < 7; i++)
		std::cout << a[i] << "\n";
	return 0;
}

    向数组中插入元素

#include <iostream>

int main() {
	int i, m, t, n;
	int a[6];
	//从键盘为数组元素赋值
	for (i = 0; i < 6; i++) {
		std::cout << "a[" << i << "]=";
		std::cin >> a[i];
	}
	//输出数组
	for (i = 0; i < 6; i++) {
		std::cout << a[i] << "\t";
		//使元素分行显示
		if ((i + 1) % 3 == 0) {
			std::cout << "\n";
		}
	}
	std::cout << "输入要插入的数据:" << "\n";
	std::cin >> m;
	std::cout << "输入要插入的位置" << "\n";
	std::cin >> n;
	//插入数据
	/*
	* 该for循环功能,首先通过for遍历数组和if语句判断需要插入的位置,之后,将对应的数据插入指定位置之后。
	* 通过“n++”来确定到指定插入数据之后的数据并且循环赋值操作。
	*/
	for (i = 0; i < 6; i++) {
		if (i == n) {
			t = a[i];
			a[i] = m;
			m = t;
			n++;
		}
	}
	//输出数组
	for (i = 0; i < 6; i++) {
		std::cout << a[i] << "\t";
		if ((i + 1) % 3 == 0) {
			std::cout << "\n";
		}
	}
	return 0;
}

    数组的删除操作

    注释:通过new 运算符动态创建,可以创建出不定长的元素的数组

#include <iostream>
using namespace std;

int main() {
	int num;
	cout << "输入一个数:" << "\n";
	cin >> num;
	int* arrays = new int[num];
	for (int i = 0; i < num; i++) {
		arrays[i] = i + 1;
	}
	for (int i = 0; i < num; i++) {
		cout << arrays[i] << "\t";
	}
	cout << "\n";
	delete[] arrays;
}

    数组冒泡排序法

#include <iostream>
using namespace std;

int main() {
	int i, j, t;
	int a[10];
	//从键盘为数组元素赋值
	for (i = 0; i < 10; i++) {
		cout << "a[" << i << "]=";
		cin >> a[i];
	}
	//排序
	for (i = 0; i < 9; i++) {
		for (j = 0; j < 9 - i; j++) {
			if (a[j] > a[j + 1]) {
				t = a[j];
				a[j] = a[j + 1];
				a[j + 1] = t;
			}
		}
	}
	cout << "输出数组:" << "\n";
	for (j = 0; j < 10; j++) {
		cout << a[j] << "\t";
		if ((j + 1) % 3 == 0) {
			cout << "\n";
		}
	}
	return 0;
}

    顺序查找数组中指定的元素

#include <iostream>
using namespace std;

int main() {
	int i, n = 0, num;
	int a[10];
	//从键盘为数组元素赋值
	for (i = 0; i < 10; i++) {
		cout << a[i] << "\t";
		cin >> a[i];
	}
	cout << "输入要查找的数据:" << "\n";
	cin >> num;
	cout << "输出数组:" << "\n";
	for (i = 0; i < 10; i++) {
		cout << a[i] << "\t";
		if ((i + 1) % 3 == 0) {
			cout << "\n";
		}
	}
	cout << "\n";
	for (i = 0; i < 10; i++) {
		if (num == a[i]) {
			cout << "要查找的元素是:" << "\n";
			cout << "a[" << i << "]=" << num << "\n";
			n++;
		}
	}
	if (n == 0) {
		cout << "要查找的元素不存在!" << "\n";
	}
	return 0;
}

    有序数组折半查找

#include <iostream>
using namespace std;

int main() {
	int i, j, t, n = 0, num;
	int a[10];
	//从键盘为数组元素赋值
	for (i = 0; i < 10; i++) {
		cout << "a[" << i << "]=";
		cin >> a[i];
	}
	//对数组进行排序
	for (i = 0; i < 9; i++) {
		for (j = 0; j < 9 - i; j++) {
			if (a[j] > a[j + 1]) {
				t = a[j];
				a[j] = a[j + 1];
				a[j + 1] = t;
			}
		}
	}
	cout << "输入要查找的数据:" << "\n";
	cin >> num;
	cout << "输出数组:" << "\n";
	for (i = 0; i < 10; i++) {
		cout << a[i] << "\t";
		if ((i + 1) % 3 == 0) {
			cout << "\n";
		}
	}
	cout << "\n";
	int left = 0, right = 9, mid;
	while (left < right) {
		mid = (left + right) / 2;
		if (a[mid] == num) {
			cout << "要查找的元素是:" << "\n";
			cout << "a[" << mid << "]=" << num << "\n";
			n++;
		}
		if (a[mid] < num) {
			left = mid + 1;
		}
		else {
			right = mid - 1;
		}
	}
	if (n == 0) {
		cout << "要查找的元素不存在!" << "\n";
	}
	return 0;
}

    计算字符串中有多少个单词

#include <stdio.h>
#include <iostream>
using namespace std;

int main() {
	char cString[100];
	int iIndex, iWord = 1;
	char cBlank;
	gets_s(cString);

	if (cString[0] == '\0') {
		printf_s("Thear is no char!\n");
	}
	else if (cString[0] == ' ') {
		printf_s("First char just is a blank!\n");
	}
	else {
		for (iIndex = 0; cString[iIndex] != '\0'; iIndex++) {
			cBlank = cString[iIndex];
			if (cBlank == ' ') {
				iWord++;
			}
		}
		printf_s("%d\n", iWord);
	}
	return 0;
}

    获取数组中元素的个数

#include <iostream>
using namespace std;

int main() {
	int array[] = { 1,3,4,56,76,23,3455 };
	cout << "Array has " << sizeof(array) / sizeof(int) << " element" << endl;
	for (int i = 0; i < sizeof(array) / sizeof(int); i++) {
		cout << "element" << i << " is: " << array[i] << endl;
	}
	return 0;
}

    输出数组元素

#include <iostream>
using namespace std;

void main() {
	int iArray[10];
	cout << "input 10 number: " << endl;
	for (int i = 0; i < 10; i++) {
		cin >> iArray[i];
	}
	system("cls");
	//输出数组元素
	cout << "start output: " << endl;
	for (int i = 0; i < 10; i++) {
		cout << iArray[i] << endl;
	}
	return;
}

    将二维数组行列对换

#include <iostream>
#include <iomanip>
using namespace std;

//fun 函数实现数组元素变换
int fun(int array[3][3]) {
	int i, j, t;
	for (i = 0; i < 3; i++) {
		for (j = 0; j < i; j++) {
			t = array[i][j];
			array[i][j] = array[j][i];
			array[j][i] = t;
		}
		return 0;
	}
}

void main() {
	int i, j;
	int array[3][3] = { {1,2,3},{4,5,6},{7,8,9} };
	cout << "Converted Front" << endl;
	for (i = 0; i < 3; i++) {
		for (j = 0; j < 3; j++) {
			cout << setw(7) << array[i][j];
		}
		cout << endl;
	}
	fun(array);
	cout << "Converted Result" << endl;
	for (i = 0; i < 3; i++) {
		for (j = 0; j < 3; j++) {
			cout << setw(7) << array[i][j];
		}
		cout << endl;
	}
	return;
}

    将二维数组转换为一维数组

#include <iostream>
using namespace std;

int main() {
	int array1[3][4] = {
		{1,2,3,4},
		{5,6,7,8},
		{9,10,11,12}
	};
	int array2[12] = {0};
	int row, col, i;
	cout << "array old" << endl;
	for (row = 0; row < 3; row++) {
		for (col = 0; col < 4; col++) {
			cout << array1[row][col];
		}
		cout << endl;
	}
	cout << "array new" << endl;
	for (row = 0; row < 3; row++) {
		for (col = 0; col < 4; col++) {
			i = col + row * 4;
			array2[i] = array1[row][col];
		}
	}
	for (i = 0; i < 12; i++) {
		cout << array2[i] << endl;
	}
	return 0;
}

    使用指针变量遍历二维数组

#include <iostream>
#include <iomanip>
using namespace std;

void main() {
	int a[4][3] = { 1,2,3,4,5,6,7,8,9,0,11,12 };
	int* p;
	p = a[0]; //a[0]表示数组a的首地址
	for (int i = 0; i < sizeof(a) / sizeof(int); i++) //遍历数组元素
	{
		cout << "address:";
		cout << a[i];
		cout << " is ";
		cout << *p++ << endl; //指针遍历数组
	}
	return;
}

    学生成绩排名

#include <iostream>
using namespace std;
int main() {
	char name[10][10];
	strcpy_s(name[0], "Mary");
	strcpy_s(name[1], "Jam");
	strcpy_s(name[2], "Jack");
	strcpy_s(name[3], "Jose");
	strcpy_s(name[4], "Hery");
	strcpy_s(name[5], "Mark");
	strcpy_s(name[6], "Dobbs");
	strcpy_s(name[7], "Steven");
	strcpy_s(name[8], "Stanly");
	strcpy_s(name[9], "John");
	cout << "开始输入分数:" << endl;
	int score[10][2];
	int scoretmp, itmp;
	for (int i = 0; i < 10; i++) {
		score[i][0] = i;
		cout << name[i] << endl;
		cin >> score[i][1];
	}
	for (int m = 1; m < 10; m++) {
		for (int n = 9; n >= m; n--) {
			if (score[n][1] < score[n - 1][1])  //排序
			{
				scoretmp = score[n - 1][1];
				itmp = score[n - 1][0];
				score[n - 1][1] = score[n][1];
				score[n - 1][0] = score[n][0];
				score[n][1] = scoretmp;
				score[n][0] = itmp;
			}
		}
	}
	system("cls");
	for (int j = 0; j < 10; j++) {
		cout << name[score[j][0]] << " is ";
		cout << score[j][1] << endl;
	}
	return 0;
}

    求矩阵对角线之和

#include <stdio.h>

int main() {
	int a[3][3];
	int i, j, sum = 0;
	printf_s("please input: \n");
	for (i = 0; i < 3; i++)  //数组循环进行赋值
	{
		for (j = 0; j < 3; j++) {
			scanf_s("%d", &a[i][j]);
		}
	}
	for (i = 0; i < 3; i++) //循环计算对角线的总和
	{
		for (j = 0; j < 3; j++) {
			if (i == j) {
				sum = sum + a[i][j];
			}
		}
	}
	printf_s("The result is :%d\n ", sum);
	return 0;
}

    反向输出字符串

#include<stdio.h>

int main() {
	int i;
	char String[7] = { "mrsoft" };
	char Reverse[7] = { 0 };
	int size;
	size = sizeof(String); //计算源字符串长度

	for (i = 0; i < 6; i++) {
		Reverse[size - i - 2] = String[i];
	}

	printf_s("输出源字符串:%s\n", String);
	printf_s("输出目标字符串:%s\n", Reverse);
	return 0;
}

    使用数组保存学生姓名

#include <stdio.h>

int main()
{
	const char* ArrayName[5];
	int index;
	ArrayName[0] = "WangJiasheng";
	ArrayName[1] = "LiuWen";
	ArrayName[2] = "SuYuqun";
	ArrayName[3] = "LeiYu";
	ArrayName[4] = "ZhangMeng";
	for (index = 0; index < 5; index++)
	{
		printf_s("%s\n", ArrayName[index]);
	}
	return 0;
}

    数组中连续相等数的计数

#include <stdio.h>

void main()
{
	int a[10] = { 2,3,4,5,6,7,7,7,7,2 };
	int i = 0;
	int n = 10;
	int len = 1, k = 0, j = 0;
	printf_s("Array element:\n");
	for (int m = 0; m < 10; m++)
	{
		printf_s("%d", a[m]);
	}
	printf_s("\n");
	while (i < n - 1)
	{
		while (i < n - 1 && a[i] == a[i + 1])
			i++;
		if (i - j + 1 > len)
		{
			len = i - j + 1;
			k = j;
		}
		i++;
		j = i;
	}
	printf_s("Same max len is %d,Postion is %d\n", len, k);
	return;
}

    两个数组元素的交换

#include <stdio.h>

void change(int a[], int b[], int n) //数组作为参数
{
	int tmp;
	for (int i = 0; i < n; i++)
	{
		tmp = a[i];
		a[i] = b[i];
		b[i] = tmp;
	}
}

void main()
{
	int i, a[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int b[10] = { 11,12,14,15,16,17,18,19,20 };
	printf_s("Change Before:");
	printf_s("\nArray a:");
	for (i = 0; i < 10; i++)
	{
		printf_s("%d", a[i]);
	}
	printf_s("\n");
	printf_s("\nArray b:");
	for (i = 0; i < 10; i++)
	{
		printf_s("%d", b[i]);
	}
	printf_s("\n");
	change(a, b, 10);
	printf_s("Change After:");
	printf_s("\nArray a:");
	for (i = 0; i < 10; i++)
	{
		printf_s("%d", a[i]);
	}
	printf_s("\n");
	printf_s("\nArray b:");
	for (i = 0; i < 10; i++)
	{
		printf_s("%d", b[i]);
	}
}

    二维数组每行的最大值

#include <stdio.h>

void main()
{
	int max;
	int a[3][4] = { 1,2,3,4,5,6,7,8,9,0,11,12 };
	printf_s("Array:\n");
	for (int m = 0; m < 3; m++)
	{
		for (int n = 0; n < 4; n++)
		{
			printf_s("%d", a[m][n]);
		}
		printf_s("\n");
	}
	for (int i = 0; i < 3; i++)
	{
		max = a[i][0];
		for (int j = 1; j < 4; j++)
		{
			if (max < a[i][j])
				max = a[i][j];
		}
		printf_s("%d line max %d\n", i, max);
	}
}

    二维数组行和列的最小值

#include <stdio.h>

void main()
{
	int b[3], c[4], i, j;
	int a[3][4] = { 1,2,3,4,5,6,7,8,9,0,11,21 };
	for (i = 0; i < 3; i++) //判断每一行
	{
		b[i] = a[i][0];
		for (j = 1; j < 4; j++)
		{
			if (a[i][j] < b[i])
				b[i] = a[i][j];
		}
	}
	for (j = 0; j < 4; j++) //判断每一列
	{
		c[j] = a[0][j];
		for (i = 1; i < 3; i++)
		{
			if (a[i][j] < c[j])
				c[j] = a[i][j];
		}
	}
	for (i = 0; i < 3; i++) //输出每一行的最小值
	{
		for (j = 0; j < 4; j++)
		{
			printf_s("%7d", a[i][j]);
		}
		printf_s(" Row min: %5d\n", b[i]);
	}
	for (i = 0; i < 4; i++)
	{
		printf_s("%7d", c[i]);
	}
	printf_s(" :Col min\n");
	return;
}

    二维数组行最大值中的最小值

#include <stdio.h>

void main()
{
	int a[5][5] = {
		{1,2,3,4,5},
		{3,4,6,7,89},
		{23,456,23,657,23},
		{234,456,234,567,678},
		{2354,56757,78,456,345}
	};
	int max, min, n = 5;
	/*输出数组*/
	for (int m = 0; m < 5; m++)
	{
		for (int n = 0; n < 5; n++)
		{
			printf_s("%d,", a[m][n]);
		}
		printf_s("\n");
	}
	for (int row = 0; row < n; row++) /*控制数组的行*/
	{
		max = a[row][0];
		for (int col = 1; col < n; col++)
		{
			if (max < a[row][col])
				max = a[row][col];
		}
		if (row == 0)
		{
			min = max;
		}
		else if (min > max)
			min = max;
	}
	printf_s("linemax min is %d\n", min);
	return;
}

    删除数组中重复的连续元素

#include <stdio.h>

int deleteElement(int b[], int n, int i, int len)
{
	int* p, * q;
	if (i<1 && i + len>n) return 0;
	for (q = b + i, p = b + i + len; q < b + n; p++, q++)
	{
		*q = *p;
	}
	return n - len;
}

void main()
{
	int a[10] = { 1,2,3,4,6,6,6,8,9,0 };
	int* p = a, n;
	int i, len;
	for (int m = 0; m < 2; m++)
	{
		for (int n = 0; n < 5; n++)
		{
			printf_s("%d,", a[m * 5 + n]);
		}
		printf_s("\n");
	}
	printf_s("Input delect index and length: \n");
	scanf_s("%d%d", &i, &len);
	n = deleteElement(a, 10, i, len);
	if (n == 0)
		printf_s("erro.\n");
	else
	{
		printf_s("\n");
		for (p = a; p < a + n; p++)
		{
			printf_s("%3d", *p);
		}
		printf_s("\n");
	}
	return;
}

    删除有序数组中的重复元素

#include <stdio.h>

int deleteElement(int b[], int n)
{
	int* p, * q, * pl;
	int c;
	for (p = b; p < b + n; p++) /*访问数组b中每个元素*/
	{
		q = p + 1;
		c = 0;
		while (*q == *p && q < b + n)
		{
			q++;
			c++;
		}
		if (q <= b + n)
		{
			for (pl = p + 1; q < b + n; pl++, q++) /*删除C个元素*/
			{
				*pl = *q;
			}
			n -= c;
		}
	}
	return n;
}

void main()
{
	int a[10] = { 1,2,3,4,4,4,7,8,9,0 };
	int* p = a, n;
	int i, len;
	for (int m = 0; m < 2; m++)
	{
		for (int n = 0; n < 5; n++)
		{
			printf_s("%d", a[m * 5 + n]);
		}
		printf("\n");
	}
	n = deleteElement(a, 10);
	printf_s("\n");
	for (p = a; p < a + n; p++)
	{
		printf_s("%3d", *p);
	}
	printf_s("\n");
}

    数组合并

#include <stdio.h>

void combine(int* a, int* b, int* c, int n, int m)
{
	int* p1, * p2, * p3;
	for (p1 = a, p2 = b, p3 = c; p1 < a + n && p2 < b + m;)
	{
		if (*p1 < *p2) /*将数据小的存放到p3指向的地址空间*/
		{
			*p3++ = *p1++;
		}
		else
		{
			*p3++ = *p2++;
		}
		while (p1 < a + n) *p3++ = *p1++;
		while (p2 < b + m) *p3++ = *p2++;
	}
}

void main()
{
	int a[6] = { 1,2,3,4,5,6 };
	int b[5] = { 11,22,12,12,14 };
	int c[5 + 6];
	int* p = a, * q = b;
	printf_s("Array a: ");
	for (int i = 0; i < 6; i++)
	{
		printf_s("%d ", a[i]);
	}
	printf_s("\n");
	printf_s("Array b: ");
	for (int i = 0; i < 6; i++)
	{
		printf_s("%d ", b[i]);
	}
	printf_s("\n");
	combine(a, b, c, 6, 5);
	printf_s("Array c: ");
	for (p = c; p < c + 5 + 6; p++)
	{
		printf_s("%2d ", *p);
	}
	printf_s("\n", *p);
	return;
}

    利用数组计算平均成绩

#include <stdio.h>

void main()
{
	int i;
	int score[5], aver = 0;
	printf_s("Please input scores of 5 students: \n");
	for (i = 0; i < 5; i++)
	{
		scanf_s("%d ", &score[i]);
		aver += score[i];
	}
	aver /= 5;
	printf_s("The average score is: %d\n", aver);
	return;
}

    数组中整数的判断

#include <stdio.h>

void main()
{
	int data[5], i;
	printf_s("Please input 5 number: \n");
	for (i = 0; i < 5; i++)
	{
		scanf_s("%d", &data[i]);
	}
	for (i = 0; i < 5; i++)
	{
		if (data[i] == 25)
		{
			printf_s("25 is input the postion %d\n", i + 1);
			break;
		}
		if (i >= 5)
			printf_s("3 is not in data.\n");
	}
	return;
}

    判断二维数组中是否有相同的元素

#include <stdio.h>

int Same(int a[][4], int m, int n)
{
	int i, j, k, p;
	for (i = 0; i < m; i++) /*控制行*/
	{
		for (j = 0; j < n - 1; j++) /*控制列*/
		{
			for (p = j + 1; p < n; p++)
			{
				if (a[i][j] == a[i][p]) /*判断其后面的元素是否有与此元素相同的元素*/
				{
					printf_s("Yes");
					return 0;
				}
			}
			for (k = i + 1; k < m; k++)
			{
				for (p = 0; p < n; p++) /*p访问本行后面的其他元素,看是否有相同的元素*/
				{
					if (a[k][p] == a[i][j])
					{
						printf_s("Yes");
						return 0;
					}
				}
			}
		}
	}
	printf_s("No");
	return 1;
}

void main()
{
	int a[3][4] = { 1,2,3,4,5,6,7,8,9,0,11,12 };
	for (int m = 0; m < 3; m++)
	{
		for (int n = 0; n < 4; n++)
		{
			printf_s("%d ", a[m][n]);
		}
		printf_s("\n");
	}
	printf_s("Has same element:");
	Same(a, 3, 4);
	printf("\n");
	return;
}

    统计学生成绩分布

#include <stdio.h>

void main()
{
	int i, a[10];
	int b[6] = { 0,0,0,0,0,0 };
	printf_s("enter 10 score:");
	for (i = 0; i < 10; i++)
	{
		//向数组a中输入数据
		scanf_s("%d", &a[i]);
		switch (a[i] / 10)
		{
		case 6:b[0]++; break;
		case 7:b[1]++; break;
		case 8:b[2]++; break;
		case 9:b[3]++; break;
		case 10:b[4]++; break;
		}
	}
	printf_s("the result is: \n");
	for (i = 0; i < 5; i++)
	{
		printf_s("Score %d has : %d\n", (i + 6) * 10, b[i]);
	}
	return;
}



[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

最后于 2021-5-21 15:27 被天象独行编辑 ,原因:
收藏
点赞3
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回