首页 > 其他分享 >数据结构线性表两种方式分享

数据结构线性表两种方式分享

时间:2024-09-23 20:34:20浏览次数:1  
标签:te 线性表 int void next ss 数据结构 分享 cout

第一种方式为老师说的数组+结构体(课本上),我用的是c++,其实与c没什么不同(区别:cin是scanf,cout是print,new是malloc()函数),我用的全局变量,所以不用传参。
代码1:

点击查看代码
#include<iostream>
#include<cstring>
using namespace std;
const int N = 1e4 + 5;

struct ss {
	char name[10], str[15];
	double test;
};

struct kk {
	ss data[N];
	int length;
}tests;

void scanfs(int);
void print();
void find1(char x[]);
void find2(int);
void cha(ss, int);
void shan(int);

int main() {
	int n, h;
	cout << "请输入初始成绩表人数:\n";
	cin >> n;
	scanfs(n);
	while (true) {
		cout << "请选择您的操作:\n";
		cout << "1:输出全部成绩表\n";
		cout << "2:按姓名查找\n";
		cout << "3:按指定位置查找\n";
		cout << "4:在指定位置插入成绩\n";
		cout << "5:删除指定位置信息\n";
		cout << "6:成绩表中的人数\n";
		cout << "7:退出:\n";
		cin >> h;
		if (h == 7) break;
		if (h > 7 || h < 1) cout << "输入错误!\n";
		switch (h) {
		case 1:print(); break;
		case 2:char x[10];
			cout << "请输入您要查找的姓名:\n";
			cin >> x;
			find1(x); break;
		case 3:int k;
			cout << "请输入您要查找的位置:\n";
			cin >> k;
			find2(k); break;
		case 4:ss x1; int k1;
			cout << "请按学号、姓名、成绩、位置的顺序输入;\n";
			cout << "学号:\n"; cin >> x1.str;
			cout << "姓名:\n"; cin >> x1.name;
			cout << "成绩:\n"; cin >> x1.test;
			cout << "插入位置\n"; cin >> k1;
			cha(x1, k1); break;
		case 5:int k2;
			cout << "请输入您要删除的位置:\n";
			cin >> k2;
			shan(k2); break;
		case 6:cout << "人数为:" << tests.length << endl;
		}
		cout << "----------输入任意键返回----------\n";
		getchar(); getchar();
	}

	return 0;
}

void scanfs(int n) {
	cout << "请按学号、姓名、成绩的顺序输入;\n";
	for (int i = 1; i <= n; i++) {
		printf("-----学生%d-----\n", i);
		cout << "学号:\n"; cin >> tests.data[i].str;
		cout << "姓名:\n"; cin >> tests.data[i].name;
		cout << "成绩:\n"; cin >> tests.data[i].test;
	}
	tests.length = n;
}

void print() {
	if (tests.length == 0) {
		cout << "暂为空表\n"; 
		return;
	}
	printf("%15s%10s%8s\n", "学号", "姓名", "成绩");
	for (int i = 1; i <= tests.length; i++)
		printf("%15s%10s%8.2lf\n", tests.data[i].str, tests.data[i].name, tests.data[i].test);
}

void find1(char x[]) {
	for (int i = 1; i <= tests.length; i++)
		if (strcmp(x, tests.data[i].name) == 0) {
			printf("%15s%10s%8s\n", "学号", "姓名", "成绩");
			printf("%15s%10s%8.2lf\n", tests.data[i].str, tests.data[i].name, tests.data[i].test);
			return;
		}
	printf("查无此人!\n");
}

void find2(int k) {
	if (k > 0 && k <= tests.length) {
		printf("%15s%10s%8s\n", "学号", "姓名", "成绩");
		printf("%15s%10s%8.2lf\n", tests.data[k].str, tests.data[k].name, tests.data[k].test);
		return;
	}
	printf("查无此人!\n");
}

void cha(ss x, int k) {
	if (tests.length == N) {
		printf("内存已满!\n");
		return;
	}
	if (k > tests.length + 1) {
		printf("插入不在成绩表中,请重新选择插入位置\n");
		return;
	}
	tests.length++;
	for (int i = tests.length; i > k; i--)
		tests.data[i] = tests.data[i - 1];
	tests.data[k] = x;
}

void shan(int k) {
	if (k<1 || k>tests.length) {
		cout << "删除位置不在成绩表内\n";
		return;
	}
	for (int i = k; i < tests.length; i++)
		tests.data[i] = tests.data[i + 1];
	tests.length--;
}

第二种方式是链表,是上一种稍微做了改变(报告是两种方式都要哦!)

代码2:

点击查看代码

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

struct ss {
	char name[10], str[15];
	double test;
	ss* next;
};

ss* head;
int num;

void scanfs(int);
void print();
void find1(char x[]);
void find2(int);
void cha(ss, int);
void shan(int);

int main() {
	int n, h;
	cout << "请输入初始成绩表人数:\n";
	cin >> n;
	scanfs(n);
	while (true) {
		cout << "请选择您的操作:\n";
		cout << "1:输出全部成绩表\n";
		cout << "2:按姓名查找\n";
		cout << "3:按指定位置查找\n";
		cout << "4:在指定位置插入成绩\n";
		cout << "5:删除指定位置信息\n";
		cout << "6:成绩表中的人数\n";
		cout << "7:退出:\n";
		cin >> h;
		if (h == 7) break;
		if (h > 7 || h < 1) cout << "输入错误!\n";
		switch (h) {
		case 1:print(); break;
		case 2:char x[10];
			cout << "请输入您要查找的姓名:\n";
			cin >> x;
			find1(x); break;
		case 3:int k;
			cout << "请输入您要查找的位置:\n";
			cin >> k;
			find2(k); break;
		case 4:ss x1; int k1;
			cout << "请按学号、姓名、成绩、位置的顺序输入;\n";
			cout << "学号:\n"; cin >> x1.str;
			cout << "姓名:\n"; cin >> x1.name;
			cout << "成绩:\n"; cin >> x1.test;
			cout << "插入位置\n"; cin >> k1;
			cha(x1, k1); break;
		case 5:int k2;
			cout << "请输入您要删除的位置:\n";
			cin >> k2;
			shan(k2); break;
		case 6:cout << "人数为:" << num<< endl;
		}
		cout << "----------输入任意键返回----------\n";
		getchar(); getchar();
	}

	return 0;
}

void scanfs(int n) {
	ss *te,*p;
	head = new ss;
	p = new ss;
	head->next = nullptr;
	cout << "请按学号、姓名、成绩的顺序输入;\n";
	for (int i = 1; i <= n; i++) {
		te = new ss;
		printf("-----学生%d-----\n", i);
		cout << "学号:\n"; cin >> te->str;
		cout << "姓名:\n"; cin >> te->name;
		cout << "成绩:\n"; cin >> te->test;
		te->next = nullptr;
		if (i == 1) head->next = te;
		else p->next = te;
		p = te;
	}
	num = n;
}

void print() {
	if (head->next == nullptr) {
		cout << "暂为空表\n";
		return;
	}
	ss* te=head->next;
	printf("%15s%10s%8s\n", "学号", "姓名", "成绩");
	while (te != nullptr) {
		printf("%15s%10s%8.2lf\n", te->str, te->name, te->test);
		te = te->next;
	}	
}

void find1(char x[]) {
	ss* te = head->next;
	while (te != nullptr) {
		if (strcmp(x, te->name) == 0) {
			printf("%15s%10s%8s\n", "学号", "姓名", "成绩");
			printf("%15s%10s%8.2lf\n", te->str, te->name, te->test);
			return;
		}
		te = te->next;
	}	
	printf("查无此人!\n");
}

void find2(int k) {  
	ss* te = head->next;
	int p = 0;
	while (te!= nullptr && p < k-1) {
		te = te->next;
		p++;
	}
	if (k > 0 && k <= num) {
		printf("%15s%10s%8s\n", "学号", "姓名", "成绩");
		printf("%15s%10s%8.2lf\n", te->str, te->name, te->test);
		return;
	}
	printf("查无此人!\n");
}

void cha(ss x, int k) {
	ss* te,*p=head;
	int p1 = 0;
	if (k > num + 1) {
		printf("插入不在成绩表中,请重新选择插入位置\n");
		return;
	}
	num++;
	te = &x;
	while (p->next != nullptr && p1++ < k-1)
		p = p->next;
	te->next = p->next;
	p->next = te;
}

void shan(int k) {
	if (k<1 || k>num) {
		cout << "删除位置不在成绩表内\n";
		return;
	}
	ss* p = head,*te;
	int p1 = 0;
	while (p->next != nullptr && p1++ < k-1)
		p = p->next;
	te = p->next;
	p->next = te->next;
	delete te;
	num--;
}

标签:te,线性表,int,void,next,ss,数据结构,分享,cout
From: https://www.cnblogs.com/liyutaocpp/p/18427845

相关文章

  • 算法与数据结构学习路线图
    基础阶段编程语言基础:选择一门编程语言作为学习算法与数据结构的工具,如Python、Java、C++等,掌握其基本语法、数据类型、控制结构、函数等。这是后续学习的基础。学习时间:建议花费1-2个月左右打牢基础。学习网站及资源:菜鸟教程:网址为https://www.runoob.com/,提供各种编程......
  • 小学心理健康教育主题海报设计分享
    主题设计:为了倡导小学生重视心理健康教育,本次设计以“打开心窗,享受健康”为主题,旨在通过直观的视觉元素传达心理健康的重要性。设计思路:色彩选择:主体背景采用温暖的樱花粉色调,字体颜色选择象牙白色调,象征着纯净与和谐,同时易于引起小学生的注意。形状与布局:海报的左上角及右下......
  • 跨越传统:SAP业务技术云平台的成功案例分享
    在当今信息化时代,企业在激烈的市场竞争中脱颖而出,离不开强大的信息技术支持。SAP业务技术云平台作为一款创新型的企业管理解决方案,以其卓越的技术和灵活性,帮助各行各业实现跨越传统的巨大飞跃。今天,我们来分享一些通过SAP业务技术云平台成功转型的经典案例,以飨读者。 首先,制造行业......
  • 数据结构 ——— 常见的时间复杂度计算例题(最终篇)
    目录前言例题1:例题2(例题1的延申):例题3:前言在前两章分析了不少常见的时间复杂度计算例题,有固定执行N次的,也有要分情况看待的数据结构———常见的时间复杂度计算例题(上篇)-CSDN博客数据结构———常见的时间复杂度计算例题(中篇)-CSDN博客接下来要分析的是递归算法的......
  • 数据结构与算法——Java实现 12.习题——合并有序链表
    目录21.合并两个有序链表方法1递归思路方法2迭代思路 完整代码结点类方法 人各有所感,角度不同又怎能感同身受                                                ——24.9.2321.合并两个有序链表将两个......
  • 数据结构 - 概述及其术语
    经过上一章节《数据结构与算法之间有何关系?》的阐述,相信大家对数据结构多少有了点了解,今天我们将进入数据结构的正式学习中。在计算机科学中,数据结构是一种数据管理、组织和存储的格式。它是相互之间存在一种或多种特定关系的数据元素的集合。在计算机中一个静态数据是没有灵魂......
  • 【专题】2024新能源企业“出海”系列之驶向中东、东南亚报告合集PDF分享(附原数据表)
    在“双碳”目标引领下,中国新能源产业近年迅猛发展,新能源企业凭借技术革新、政策支持与市场驱动实现快速增长,在产业链完备、技术领先、生产效能及成本控制等方面优势显著。面对国内外环境不确定性增强的常态化态势,中国新能源企业积极开拓海外市场,开启“出海”征程。中东地区凭借独特......
  • 树上数据结构问题
    天天爱跑步假设现在又一棵树如果一个人要从\(3\)跑到\(5\),那么如果在\(2\)点的观察员要满足\(w[2]=dep[2]-dep[3]\),如果在点\(4\)的观察员要满足\(w[4]=dep[fa[lca]]-dep[3]+dep[lca]-dep[4]\),简单来说就是如果处于\(i\)点的观察员可以观察到,那么要......
  • 网站渗透这块水太深,你把握不住!但你叔我能(十年经验分享)
    很多朋友问我,想搞网络安全,编程重要吗,选什么语言呢?国内其实正经开设网络安全专业的学校很少,大部分同学是来自计算机科学、网络工程、软件工程专业的,甚至很多非计算机专业自学的。因此不像这三个专业,有系统的课程体系,大一教什么,大二教什么,大三又教什么,那么清晰明白,网络安全这......
  • 免费分享源码 SSM酒店信息管理系统 计算机毕业设计论文41731
    摘 要酒店信息管理系统是一种基于计算机技术的管理工具,旨在提高酒店业务效率和服务质量。该系统通过集成多个功能模块,实现酒店各项业务的自动化管理,包括客房信息管理、预订信息管理、入住信息管理、退房信息管理、续费信息管理等。该系统可以大大提高酒店管理的效率,减少......