顺序表(SeqList)
---恢复内容开始---
数据结构在上周结课,接下来就是为期几周的上机实验,说是实验课我感觉还不如不上。几乎每个人都是按着老师的要求把书上的代码打一遍,变都不变。一遍以后连自己打的什么都不知道。
与其说是实验课,我感觉不如叫它打字练习课。
老师做的并没错,错的是学生对于这节课的态度,老师已经把该讲的讲过了,而上机就是学生们自己领悟的过程,对于代码不能打一遍就是一遍过去了。要在打的过程中了解你所打的每一句
代码是干什么的、在函数中起到的是什么作用,而这个函数在整个程序中起到的又是什么作用。所以我写这篇博客,是我离开书本自己去尝试打第二次,试着去回忆,试着去自己坐。而后的注释
是第三次去看这段代码,自己加上去的,然后再与书本对照,看看自己想法上面的错误。
之前听好多人对我说,数据结构是编程最重要的基本功没有之一!而我认为:当你在考虑学一个东西值不值得学的时候,你应该去把它学了,不然往往会后悔。通过这个学期的学习,我也能
体会到数据结构的重要性。数据结构是基础,数据结构之于编程就像加减乘除之于数学,所以要把他作为我学习的重中之重。
① 头文件SeqList.h:
//#ifndef SeqList_H 避免重复包含SeqList.h头文件 但是在Dec-C++中不能用
#define SeqList_H
const int MaxSize=; //该线性表最多有15个元素 class SeqList
{
public:
SeqList(){length=;} //无参构造函数
SeqList(int a[],int n); //有参构造函数
~SeqList(){} //析构函数
void Insert(int i,int x); //在表的第i个位置插入之为x的元素
int Delete(int i); //删除第i个元素
int Locate(int x); //求值为x的元素在线性表中的位置
void PrintList(); //按序号依次输出各元素
private:
int data[MaxSize]; //存放数据元素的数组
int length; //线性表的长度
};
SeqList.h
②成员函数定义文件SeqList.cpp:
#include<iostream>
using namespace std;
#include"SeqList.h" //引入在.h文件中类的声明 SeqList::SeqList(int a[],int n)
{
if(n>MaxSize) throw "参数非法"; //元素的数量要小于MaxSize
for(int i=;i<n;i++)
data[i]=a[i];
length=n;
}
void SeqList::Insert(int i,int x)
{
if(length>=MaxSize) throw "上溢";
if(i<||i>length+) throw "位置非法";
for(int j=length;j>=i;j--) //将第j个元素存在数组下标为j-1处;
data[j]=data[j-];
data[i-]=x;
length++;
}
int SeqList::Delete(int i)
{
if(length==) throw "下溢";
if(i<||i>length) throw "位置非法";
int x=data[i-];
for(int j=i;j<length;j++)
data[j-]=data[j];
length--;
return x;
}
int SeqList::Locate(int x)
{
for(int i=;i<length;i++)
if(data[i]==x) return i+; //下标为i的元素的序号为i+1
return ; //找不到值为x的元素
}
void SeqList::PrintList()
{
for(int i=;i<length;i++)
cout<<data[i]<<" ";
cout<<endl;
}
SeqLis.cpp
③主函数文件SeqList_main.cpp:
#include<iostream>
using namespace std;
#include"SeqList.h" //引入在.h文件中类的声明 int main()
{
int r[]={,,,,,,,,,}; //老师要求将学号存入线性表
SeqList L(r,);
cout<<"执行插入操作前数据为:"<<endl;
L.PrintList();
try
{
L.Insert(,); //在第2个位置插入值为3的元素
}
catch (char *s)
{
cout<<s<<endl;
}
cout<<"执行插入操作后数据为:"<<endl;
L.PrintList(); //输出所有元素
cout<<"值为3的元素位置为:";
cout<<L.Locate()<<endl;
cout<<"执行删除第一个元素操作,删除前数据为:"<<endl;
L.PrintList();
try
{
L.Delete(); //删除第1个元素
}
catch(char *s)
{
cout<<s<<endl;
}
cout<<"删除后数据为:"<<endl;
L.PrintList();
return ;
}
SeqList_main.cpp
运行结果:

顺序表(SeqList)的更多相关文章
- 线性表之顺序表C++实现
线性表之顺序表 一.头文件:SeqList.h //顺序线性表的头文件 #include<iostream> ; //定义顺序表SeqList的模板类 template<class ...
- 数据结构——顺序表(sequence list)
/* sequenceList.c */ /* 顺序表 */ /* 线性表的顺序存储是指在内存中用地址连续的一块存储空间顺序存放线性表中的各项数据元素,用这种存储形式的线性表称为顺序表. */ #in ...
- [数据结构 - 第3章] 线性表之顺序表(C++实现)
一.类定义 顺序表类的定义如下: #ifndef SEQLIST_H #define SEQLIST_H typedef int ElemType; /* "ElemType类型根据实际情况 ...
- 线性表源码分享(c++),包含顺序表、单链表、循环链表、双向链表
---恢复内容开始--- 我是一个c++和数据结构的初学者,本文主要是把清华大学出版社的数据结构(用面向对象方法与c++语言描述)(第2版)这本书中第二章线性表的源码抄下来,在学习的过程中有助于加深印 ...
- C语言项目实现顺序表
#include <stdio.h> #include <stdlib.h> #include "test_顺序表声明.h" /* run this pro ...
- 数据结构:顺序表(python版)
顺序表python版的实现(部分功能未实现) #!/usr/bin/env python # -*- coding:utf-8 -*- class SeqList(object): def __ini ...
- 《数据结构》2.2顺序表(sequence list)
//顺序表节点的定义 typedef struct { datatype data[MAXSIZE]; //数组容量的上限 int len; //记录最后一个元素的位置,相当于一个指针,表空时len= ...
- 数据结构顺序表删除所有特定元素x
顺序表类定义: template<class T> class SeqList : { public: SeqList(int mSize); ~SeqList() { delete[] ...
- C#线性表之顺序表
线性表是最简单.最基本.最常用的数据结构.线性表是线性结构的抽象(Abstract), 线性结构的特点是结构中的数据元素之间存在一对一的线性关系. 这种一对一的关系指的是数据元素之间的位置关系,即: ...
随机推荐
- (转)C#图解—PictureBox.SizeMode 属性
PictureBoxSizeMode.Normal: 默认情况下,在 Normal 模式中,Image 置于 PictureBox 的左上角,凡是因过大而不适合 PictureBox 的任何图像部分都 ...
- MDI窗体容器--2016年12月15日
MDI窗体容器 多文档界面(Multiple-Document Interface)简称MDI窗体.MDI窗体用于同时显示多个文档,每个文档显示在各自的窗口中.MDI窗体中通常有包含子菜单的窗口菜单, ...
- Python全栈开发【基础三】
Python全栈开发[基础三] 本节内容: 函数(全局与局部变量) 递归 内置函数 函数 一.定义和使用 函数最重要的是减少代码的重用性和增强代码可读性 def 函数名(参数): ... 函数体 . ...
- Python之美--Decorator深入详解
转自:http://www.cnblogs.com/SeasonLee/archive/2010/04/24/1719444.html 一些往事 在正式进入Decorator话题之前,请允许我讲一个小 ...
- [正则表达式]PCRE环视功能
设想一下这个问题,假设为了方便长串数字的阅读性,需要为其添加逗号作为分隔,需要怎么做呢? 2569836495 => 2,569,836,495 正则表达式的匹配通常是从左往右的,这导致无法使用 ...
- Yii 1开发日记 -- Ajax实现点击加载下一页
功能实现:先输出一页的内容,然后点击加载下一页,如图 1.控制器中 /** * 消费记录:列出用户购买章节的记录 */ public function actionMyPayHis() { //点击加 ...
- CISCO VLAN ACL
对于cisco VLAN ACL 首先得定义 standard ACL或 extented ACL用于抓取流量 注意这里的抓取流量不是最终的对流量的操作,而是决定什么样的流量用VLAN ACL 来处理 ...
- _NSInlineData objectForKeyedSubscript:
最近总是遇到这个错误:reason: '-[_NSInlineData objectForKeyedSubscript:]: unrecognized selector sent to instanc ...
- node的核心模块path
//导入模块path var path=require("path"); //path.basename :输出文件名+后缀 //console.log(path.basename ...
- zend studio 13.5破解以及集成xdebug
环境说明: 操作系统:Windows 7 Ultimate Edition Service Pack 1 PHP:7.0.11 TS Zend Studio:13.5.0 Xdebug:2.5.0 一 ...