数据结构之c++感悟
#include<iostream.h> 头文件;
#include<iostream.h> #define MAX 1024 typedef int Elemtype; typedef struct {int *elem;int length; }Sqlist;void Initlist(Sqlist &L) {L.elem=new int[MAX];if(L.elem==NULL)return;elseL.length=0; }void createlist(Sqlist &L) {cin>>L.length;for(int i=0;i<L.length;i++)cin>>L.elem[i]; }void printlist(Sqlist L) {for(int i=0;i<L.length;i++)cout<<L.elem[i]<<'\t'; }int emptylist(Sqlist L) {if(L.length==0)return 0;elsereturn 1; }int queryelem(Sqlist L,Elemtype e) {for(int i=0;i<L.length;i++)if(L.elem[i]==e)return i+1;return 0; }void getelem(Sqlist L,int i,int &e) {if(i<1 || i>L.length)return;elsee=L.elem[i-1]; }void insertelem(Sqlist &L,int i,int e) {if(i<1 || i>L.length+1)return;elsefor(int k=L.length-1;k>i-1;k--)L.elem[k+1]=L.elem[k];L.elem[i-1]=e;L.length ++; }void main() {Sqlist L;Initlist(L);createlist(L);printlist(L);int null;null=emptylist(L);if(null==0)cout<<"it is nulllist";elsecout<<" \nit is not nulllist";int e;cout<<"\nput on query elem";cin>>e;int i;i=queryelem(L,e);if(i!=0)cout<<i;cout<<"\n put on di ji ge elem";cin>>i;getelem(L,i,e);cout<<e;cout<<"put on insert elem and locate";cin>>i>>e;insertelem(L,i,e);printlist(L); }
#define MAX 1024 宏定义
typedef int Elemtype; typedef (取一个别名), int的别名就是Elemtype。
typedef struct 定义一个结构体,这个结构体的名字叫做SqList;这个SqList的结构体中有整型的*elem,整型的length
{
Elemtype *elem;
int length;
}SqList;
void InitList(SqList &L) 初始化函数来初始我定义的SqList &L这个结构体的变量,注意加&是改变L这个结构体变量的数据。
{
L.elem=new Elemtype[MAX]; 通过new函数 申请一个整型的数组,将这个数组赋予给L.elem这个指针,L.elem是调用这个elem这个整型指针。
if(L.elem==NULL) 如果这个空间为空的话,则不带返回值的return语句只能用于返回类型为void的函数,return语句是为了引起函数的强制结束,
这种用法类似于循环结构中的break语句的作用。new函数申请整型数组赋予结构体当中的指针。为什么要赋予给指针,因为
在c++中,数组其实指针来解释的。
return ; 判断开辟空间成功还是失败,失败是NULL,直接退出。成功为0
else
L.length=0; 否则就是有空间,但是这个空间还没有数据,所以他的长度为0. 有空间就相当于开辟了一个长方形。
}
void creat_list(SqList &L) 创建一个有数据的线性表的函数。
{
cin>>L.length; 输入这个线性表的长度,例如你输入5,代表在这个长方形中划4条竖线,不就有5个格子呢。5个格子还没有数据对不对啊?
for(int i=0;i<L.length;i++) 所以我们就需要用for循环来为这5个格子填写你想要的数据,不就行了。for循环输入每个具体的数据
cin>>L.elem[i]; 电脑出现让你输5次。你就输呗。
}
void print(SqList L) 创建一个打印函数。结构体Sqlist定义的L为什么没有像以前那样加&号,是因为打印函数根本没有改变L的数据啊
{
for(int i=0;i<L.length;i++) 打印不就循环小于你输入这个线性表的长度。 直接用for循环遍历即可打印。
cout<<L.elem[i]<<'\t'; 输出你打印的就行了。 打印好看点,打印的就不会挤在一起呢。\t相当于tab制表符的缩写,跳过四个空格;
}
int IsEmpty(SqList L) 判断这个线性表是否为空的话,
{
if(L.length==0) 如果是1的话就为真。 其实就是判断线性表的长度是否为0;
return 1;
else
return 0; 否则就为假呗。
}
void Getelem(SqList L,int i,Elemtype &e) 获取L中的第i个元素。第i个元素是就信息世界而言的,是对人类好理解的,对程序而言的话。第i个元素的是
第i-1个元素。知道获取的范围;
{
if(i<1||i>L.length) 刁难一下,获取的不在这个线性表的长度范围之内。
return;
else
e=L.elem[i-1]; 如果在的话,就把这个第i个元素的值赋给e呗。 线性表中的第几个元素对应的值都是固定的,因此根本就不必要想遍历。
}
int Locatelem(SqList L,Elemtype e) 这个函数就是判断这个线性表中的数据e是在第几个位置。Locatelem就是干这活的。
{
for(int i=0;i<L.length;i++)//n 首先遍历我这个线性表L中的所有数据,遍历最好用的当然是for循环呢。遍历这个线性表只要小于这个线性表的
长度即可 查询一个元素的位置当然第一步就是遍历所有的元素,看是否有符合条件的,
if(L.elem[i]==e) //n T(n)=O(n) T(n)=O(1) 遍历一个,判断一个,看他是否是在第e个位置。
return i+1; 是的话,放回一个i+1,为什么是i+1呢,因为对程序而言,他想的第一个是第从0开始,而我们人类想的第一个
是从第1开始的,所以这个变成了i+1,而不是i呢。
return 0; 如果全部遍历完了之后,都没有找到数据e,就返回0呢呗。
}
void InsertList(SqList &L,int i,Elemtype e) 这个一个插入函数,就是在第i个插入e这个元素。
{
if(i<1||i>L.length+1) 刁难一下,就是如果i<1的话和i>这个长度加1的话,为什么这个长度要加1呢,因为大于线性表的长度是可以,如
线性表的长度是5,大于5,也就是第6个,在第6个插入元素e,是完全ok的啦。 判断插入的是否在这个范围?
cout<<"位置不合理\n";
else
if(L.length>=MAX) 相当于把这张纸开辟出的长方形已经占满呢,无法再开辟呢,说明就无法再插入呢,所以表就已满呢
cout<<"表已满\n";
else
{
for(int j=L.length-1;j>=i-1;j--) 首先我肯定是遍历后三个手指,也就是第i之后的元素。 插入肯定要遍历呢。遍历后向后挪一位。空的位置赋予新值
L.elem[j+1]=L.elem[j]; 然后把三个手指往后挪一位就可以。就在第i处空出一个位置呢。 表自增。
L.elem[i-1]=e; 然后把空出的位置给e即可
L.length++; 在把整个线性表的长度加1即可。
}
}
void main() 主函数的定义
{
SqList L; 结构体sqlist定义一个名为L的线性表。
InitList(L); 通过初始化函数初始这个线性表。就是给这个线性表开辟一个空间,相当于给一张纸开辟出一个长方形。
creat_list(L); 创建一个有数据的线性表,相当于给这张纸画4条竖线。
print(L); 打印这个线性表
int len;
len=IsEmpty(L);
if(len==1)
cout<<"空表";
else
{
cout<<"非空";
}
int i;
cout<<"\n请输入查找的位置:";
cin>>i;
Elemtype e;
Getelem(L,i,e); 获取线性表中第i个元素,并将第i个元素的值赋予e
cout<<e<<endl;
cout<<"\n请输入查找的元素的值:";
cin>>e;
i=Locatelem(L,e); 查找线性表中e这个元素是在线性表中排第几个。
if(i!=0)
cout<<i<<endl;
cout<<"\n请输入插入的位置和元素的值:";
cin>>i>>e;
InsertList(L,i, e); 在线性表L中的第i处插入名为e的元素。
print(L);
}
数据结构默写代码:
1 #include<iostream.h> 2 #define MAX 1024 3 typedef int Elemtype; 4 typedef struct 5 { 6 Elemtype *elem; 7 int length; 8 }Sqlist; 9 10 void Initlist(Sqlist &L) 11 { 12 L.elem=new Elemtype[MAX]; 13 if(L.elem==NULL) 14 return; 15 else 16 L.length=0; 17 } 18 19 void createlist(Sqlist &L) 20 { 21 cin>>L.length; 22 for(int i=0;i<L.length;i++) 23 cin>>L.elem[i]; 24 } 25 26 void printlist(Sqlist L) 27 { 28 for(int i=0;i<L.length;i++) 29 cout<<L.elem[i]<<'\t'; 30 } 31 32 int emptylist(Sqlist L) 33 { 34 if(L.length==0) 35 return 1; 36 else 37 return 0; 38 } 39 40 void getelem(Sqlist L,int i,int &e) 41 { 42 if(i<1||i>L.length) 43 return; 44 else 45 e=L.elem[i-1]; 46 } 47 48 void insertelem(Sqlist &L,int i,int e) 49 { 50 if(i<1 || i>L.length+1) 51 return; 52 else 53 for(int k=L.length-1;k>=i-1;k--) 为什么k=L.length-1呢,因为他想第5个手指,对程序而言,其实就是4,0是第一个。把4往后挪一位,变成5。 54 L.elem[k+1]=L.elem[k]; 55 L.elem[i-1]=e; 56 L.length ++; 57 } 58 59 int locateelem(Sqlist L,int e) 60 { 61 for(int i=0;i<L.length;i++) 62 if(L.elem[i]==e) 63 return i+1; 64 return 0; 65 } 66 void main() 67 { 68 Sqlist L; 69 Initlist(L); 70 createlist(L); 71 printlist(L); 72 int null; 73 null=emptylist(L); 74 if(null==1) 75 cout<<"it is nulllist"; 76 else 77 cout<<"it is not nulllist"<<"\n"; 78 int i; 79 cout<<"put on locate"<<'\t'; 80 cin>>i; 81 int e; 82 getelem(L,i,e); 83 cout<<e; 84 cout<<"\nput on your insert elem locate and elem value"; 85 cin>>i>>e; 86 insertelem(L,i,e); 87 printlist(L); 88 cout<<"\nput on your query elem"; 89 cin>>e; 90 i=locateelem(L,e); 91 if(i!=0) 92 cout<<i<<endl; 93 94 }
void deleteelem(Sqlist &L,int i)
{
if(i<1 || i>L.length+1)
return;
else
for(int k=i;k<=L.length-1;k++)
L.elem[k-1]=L.elem[k];
L.length --;
}
转载于:https://www.cnblogs.com/xnb123/p/8584744.html
数据结构之c++感悟相关推荐
- 哈尔滨工业大学CSAPP大作业-2022春
计算机系统 大作业 题 目 程序人生-Hello's P2P 专 业 人工智能(未来技术) 学 号 7203610202 班 级 2036015 学 生 熊 ...
- 2023春 哈尔滨工业大学计算机系统大作业
计算机系统 大作业 题 目 程序人生-Hello's P2P 专 业 物联网工程 学 号 2021111491 班 级 2137301 学 生 业知翰 指 ...
- 数据结构-排序算法总结与感悟
数据结构-排序算法总结 一,排序的基本概念 排序:有n个记录的序列{R1,R2,-,Rn},其相应关键字的序列是{K1,K2, -,Kn },相应的下标序列为1,2,-, n.通过排序,要求找出当前下 ...
- 数据结构及算法课程感悟
上学期学习程序设计基础之后,便对数据结构的知识有了了解,同时产生了好奇心,上完两节课后,对课程有了基本的了解,数据结构的定义是指相互之间存在一种或多种特定关系的数据元素的集合用计算机存储.组织数据的方 ...
- 《Delphi 算法与数据结构》学习与感悟[3]: 获取一个字节中非空位的个数
为什么80%的码农都做不了架构师?>>> 一个字节有 8 个位, 这些位可能是 0 也可能是 1; 现在要算出一个字节中是 1 的位共有多少个. 第一种方法是一个函数; 第二种 ...
- 感悟和体会数据结构和算法
1.数据结构中,一定要注意头尾情况的特殊处理,由此可能衍生出的在编程中出现的处理情况,多数出现到3到4中情况的讨论.
- 20172324 2018-2019-1《程序设计与数据结构》实验2报告
20172324 2018-2019-1<程序设计与数据结构>实验2报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 曾程 学号:20172324 实验教师:王志强 ...
- 20172329 2017-2018-2 《程序设计与数据结构》实验五报告
这是这学期最后一次实验了,也是学到了很多东西,希望自己可以可以善始善终,加油! 让我们开始这一篇博客吧! 20172329 2017-2018-2 <程序设计与数据结构>实验五报告 课程: ...
- 个人技术生涯的感悟(2)
很多时候,一门门槛很低的编程语言对于初学者的帮助是非常大的,从而决定这个人的技术路线的选择. 在经历过大一下学期对C,和C++的迷茫之后,在大二上学期,学校在搞一个网页设计比赛,正好和两个朋友一起参赛 ...
最新文章
- 遂宁专业计算机学校,遂宁计算机专业中职学校哪家强
- 判断奇偶microsoft visual basic_#梅园# 在心理学上面如何判断一个男生暗恋你的表现...
- Python 调试:step into/step out/step over 的区别
- 【转】在html中引入CSS的方法
- Java用户账号和密码登录
- spring-boot-maven-plugin插件找不到含有main的主类
- 【python】BytesIO与串化
- 关于ZooKeeper集群脑裂及其解决方案
- LMS赛区公告:DG战队因假赛被永久除名
- 燃料电池厂商的市场竞争
- 美观实用的BeautifulReport测试报告
- 计算机操作系统,组成原理等基础课联系与区别
- 集成运算放大器及其应用
- java 判断正态分布_如何检验数据是否服从正态分布
- 美国国税局将允许纳税人通过现场面试选择退出 ID.me 面部识别
- build/envsetup.sh 简介
- 计算机专业职业适应性考试包括什么内容,2020年分类招生《职业适应性测试(职业技能测试)》大纲...
- 关于深圳商事登记招商ukey签名无效
- Springboot整合JdbcTemplate实现分页查询
- PHP 公众号文章 转 pdf,如何将微信公众号文章另存为pdf文件 微信公众号文章另存为pdf文件的方法...
热门文章
- Expm 1_2 实现快速排序的算法,并尝试采用不同的方法实现线性的划分过程.
- HDU 4907 BestCoder3_1 Task schedule
- CentOs6.x yum源停止维护,安装yum源
- 前端—每天5道面试题(8)
- 在更新iOS14.5後,App要追踪我們會先收到彈窗提示
- 怎样教育孩子,能让孩子有更好的学习?
- 为什么老海员都不舍得下船?
- 一览众山小的上一句是什么,怎么理解一览众山小的意思?
- 移动互联网将向“全真互联网”升级
- 买基金的一个很重要的知识