首页 > 其他分享 >学习后的顺序表(结点内容只设学号、姓名),表内采用数组,数组0位存放数据,相关的函数均按此来编写

学习后的顺序表(结点内容只设学号、姓名),表内采用数组,数组0位存放数据,相关的函数均按此来编写

时间:2023-09-17 19:46:57浏览次数:40  
标签:cout int 此来 element Linklist length 数组 存放数据 name

#include<iostream>
#include<string.h>
using namespace std;
typedef struct {
int id;
string name;
}Node;//结点定义
typedef struct {
Node* element;//基地址(动态长度)
int length;//表长
}Linklist;
#define MAXSIZE 100//最大长度
void menu();//声明菜单函数
void Createlist(Linklist& L);//创造空表函数
void display(Linklist& L);//遍历输出顺序表中的内容
int insert(Linklist& L, Node data, int n);//插入数据
bool find(Linklist& L);//查找数据
void add(Linklist &L);//追加数据;
void Delete(Linklist& L);//删除数据
int main()
{
Linklist L;
int flag=1;
while (flag)
{
cout << "请选择操作:" << endl;
menu();
cin >> flag;
switch(flag)
{
case 1:
Createlist(L);
cout<<"创建成功!" <<endl;
break;
case 2:
display(L);
break;
case 3:
if (find(L))
{
cout << "已找到数据!" << endl;
}
break;
case 4:
{
cout << "输入学号、姓名:" << endl;
Node node;
cin >> node.id >> node.name;
cout << "输入插入的位置:";
int n;
cin >> n;
if (insert(L, node, n)==1)
{

}
else {
if (insert(L, node, n) == 2)
cout << "数据不合理!"<<endl;
else
cout << "顺序表已满!"<<endl;
}
break;
}
case 5:
add(L);
break;
case 6:
{
Delete(L);
break;
}
default :
break;
}
}
return 0;
}
void menu()
{
cout << "-----------菜单----------" << endl;
cout << "-----------1创建---------" << endl;
cout << "-----------2输出---------" << endl;
cout << "-----------3查找---------" << endl;
cout << "-----------4插入---------" << endl;
cout << "-----------5追加---------" << endl;
cout << "-----------6删除---------" << endl;
}
void Createlist(Linklist& L)//创造空表函数
{
L.element = new Node[MAXSIZE];
if (!L.element)exit(EOVERFLOW);//存储分配失败并退出;
L.length = 0;//定义表长
}
void display(Linklist& L)//遍历输出顺序表的内容
{
int i = 0;
for (i;i < L.length;i++)
{
cout << (L.element + i)->id << " ";
cout << (L.element + i)->name << endl;

}
}
int insert(Linklist& L,Node data,int n)//插入函数
{
if (n<1 || n>L.length+1) return 2;
else{
if (L.length == MAXSIZE)return 0;
else{
for (int i = L.length-1; i>=n-1; i--)
{
L.element[i + 1] = L.element[i];
}
L.element[n-1].id= data.id;
L.element[n-1].name = data.name;
L.length++;
return 1;
}
}
cout<<"插入成功!"<<endl;
}
bool find(Linklist& L)//查找函数
{
bool flag=0;
int n;
cout << "请选择查找方式:1 结点位置 2 学号 3 姓名 " << endl;
cin >> n;
switch (n)
{
case 1:
cout << "请输入要查询的结点数:";
int nn;
cin >> nn;
if (nn > L.length)
{
cout << "超出查找范围!" << endl;
return 0;
}
else
{
cout << "第" << nn<< "个结点内容:学号: " << (L.element+nn-1)->id << "姓名:" << (L.element+nn-1)->name<<endl;
return 1;
}
break;
case 2:
{
int i = 1;
cout << "请输入学号:";
int _id;
cin >> _id;
while (i <= L.length)
{
if (_id == L.element->id)
{
cout << "第" << i+1 << "个结点, 学号:" << _id << "姓名:" << L.element->name << endl;
break;
return 1;
}
L.element++;
}
break;
return 0;
};
case 3:
{
int i = 0;
cout << "请输入姓名:";
string _name;
cin >> _name;
while (i < L.length)
{
if (_name == L.element->name)
{
cout << "第" << i+1 << "个结点, 学号:" << L.element->id << "姓名:" << L.element->name << endl;
return 1;
break;
}
L.element++;
}
return 0;
}
};
}
void Delete(Linklist& L)
{
int n;
cout << "输入删除的结点:";
cin >> n;
for (int i = n; i < L.length; i++)
{
L.element[i-1] = L.element [i];
}
L.length--;
cout << "删除成功!" << endl;
}
void add(Linklist& L)
{
cout<<"请输入追加结点个数:";
int n;
cin>>n;
Node node;
while(n--)
{
cout << "学号:";
cin >> node.id;
cout << "姓名:";
cin >> node.name;
L.element[L.length] = node;
L.length++;
cout<<"追加成功!"<<endl;
}
}

标签:cout,int,此来,element,Linklist,length,数组,存放数据,name
From: https://www.cnblogs.com/djcf/p/17709580.html

相关文章

  • 每日一题-轮转数组
    1.题目描述题目链接:轮转数组给定一个整数数组nums,将数组中的元素向右轮转k**个位置,其中k**是非负数。示例1:输入:nums=[1,2,3,4,5,6,7],k=3输出:[5,6,7,1,2,3,4]解释:向右轮转1步:[7,1,2,3,4,5,6]向右轮转2步:[6,7,1,2,3,4,5]向右轮转3步:[5,6,......
  • 【算法】如何获取一个数组的全排列?
    问题描述给定一个任意数组,如何获得数组的全排列,例如[1,2,3]的全排列数组为[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,2,1],[3,1,2]],即包含所有排列结果的长度为\(A_{n}^{n}\)的数组。算法functionpermute(arr){constresult=[];perm(arr,0,result);returnr......
  • JavaScript 创建并初始化任意长度的数组
    直接定义vararr=[0,0,0,0,0];//[0,0,0,0,0]使用push()方法vararr=[];for(leti=0;i<5;i++){arr.push(0);}//[0,0,0,0,0]使用Array构造函数和fill()方法vararr=newArray(5);//[empty×5]arr.fill(0);//[0......
  • JS计算数组层级(深度)
    如果有一个多层嵌套的数组,想要计算其层级(深度),可以使用递归或迭代方法来实现。以下是两种常用的方法示例:递归方法:functioncalculateDepth(arr){if(!Array.isArray(arr)){return0;//如果不是数组,返回0表示不是层级结构}letmaxDepth=0;for(const......
  • 【LeetCode】删除数对后的最小数组长度
    题目给你一个下标从0开始的非递减整数数组nums。你可以执行以下操作任意次:选择两个下标i和j,满足i<j且nums[i]<nums[j]。将nums中下标在i和j处的元素删除。剩余元素按照原来的顺序组成新的数组,下标也重新从0开始编号。请你返回一个整数,表示执行......
  • 数组(三)
    数组排序算法今日份学习为数组的排序算法。数组的排序算法分为三种:冒泡排序,直接选择排序以及反转排序。冒泡排序冒泡排序法在先前的C语言学习中已经有过接触。它的基本思想是对比相邻的元素值,如果满足条件就交换元素值,把较小的元素移动到数组面前,把较大的元素移动到数组后面。【......
  • C语言之[数组]篇
    前言牛牛又和大家见面了,本篇牛牛要讲的内容是c语言中有关数组的内容。欢迎大家一起学习,共同进步。@TOC数组通过前面所学到的知识,我们了解到,当我们需要使用一些变量的时候,我们可以通过创建变量来使用它,但是,有的时候我们需要使用很多个同类型的变量,那样一个个创建是否显得太过繁琐?......
  • 代码随想录算法训练营-回溯算法-2|55. 跳跃游戏、45. 跳跃游戏 II、1005. K 次取反后
    55. 跳跃游戏1.跳跃的覆盖范围。这个问题就转化为跳跃覆盖范围究竟可不可以覆盖到终点!2. 贪心算法局部最优解:每次取最大跳跃步数(取最大覆盖范围),整体最优解:最后得到整体最大覆盖范围,看是否能到终点。时间复杂度:O(n)空间复杂度:O(1)1classSolution:2defca......
  • 2023-09-16:用go语言,给你一个整数 n 和一个在范围 [0, n - 1] 以内的整数 p , 它们表示
    2023-09-16:用go语言,给你一个整数n和一个在范围[0,n-1]以内的整数p,它们表示一个长度为n且下标从0开始的数组arr,数组中除了下标为p处是1以外,其他所有数都是0。同时给你一个整数数组banned,它包含数组中的一些位置。banned中第i个位置表示arr[banned[i......
  • 2023-09-16:用go语言,给你一个整数 n 和一个在范围 [0, n - 1] 以内的整数 p , 它们表示
    2023-09-16:用go语言,给你一个整数n和一个在范围[0,n-1]以内的整数p,它们表示一个长度为n且下标从0开始的数组arr,数组中除了下标为p处是1以外,其他所有数都是0。同时给你一个整数数组banned,它包含数组中的一些位置。banned中第i个位置表示arr[banned[i]]=......