顺序表(SeqList)

---恢复内容开始---

  数据结构在上周结课,接下来就是为期几周的上机实验,说是实验课我感觉还不如不上。几乎每个人都是按着老师的要求把书上的代码打一遍,变都不变。一遍以后连自己打的什么都不知道。

与其说是实验课,我感觉不如叫它打字练习课。

  老师做的并没错,错的是学生对于这节课的态度,老师已经把该讲的讲过了,而上机就是学生们自己领悟的过程,对于代码不能打一遍就是一遍过去了。要在打的过程中了解你所打的每一句

代码是干什么的、在函数中起到的是什么作用,而这个函数在整个程序中起到的又是什么作用。所以我写这篇博客,是我离开书本自己去尝试打第二次,试着去回忆,试着去自己坐。而后的注释

是第三次去看这段代码,自己加上去的,然后再与书本对照,看看自己想法上面的错误。

  之前听好多人对我说,数据结构是编程最重要的基本功没有之一!而我认为:当你在考虑学一个东西值不值得学的时候,你应该去把它学了,不然往往会后悔。通过这个学期的学习,我也能

体会到数据结构的重要性。数据结构是基础,数据结构之于编程就像加减乘除之于数学,所以要把他作为我学习的重中之重。

① 头文件SeqList.h:

 1 //#ifndef SeqList_H                            避免重复包含SeqList.h头文件  但是在Dec-C++中不能用
 2 #define SeqList_H
 3 const int MaxSize=15;                        //该线性表最多有15个元素
 4
 5 class SeqList
 6 {
 7     public:
 8         SeqList(){length=0;}                //无参构造函数
 9         SeqList(int a[],int n);                //有参构造函数
10         ~SeqList(){}                        //析构函数
11         void Insert(int i,int x);            //在表的第i个位置插入之为x的元素
12         int Delete(int i);                    //删除第i个元素
13         int Locate(int x);                    //求值为x的元素在线性表中的位置
14         void PrintList();                    //按序号依次输出各元素
15     private:
16         int data[MaxSize];                    //存放数据元素的数组
17         int length;                            //线性表的长度
18 }; 

SeqList.h

②成员函数定义文件SeqList.cpp:

 1 #include<iostream>
 2 using namespace std;
 3 #include"SeqList.h"                                    //引入在.h文件中类的声明
 4
 5 SeqList::SeqList(int a[],int n)
 6 {
 7     if(n>MaxSize)  throw "参数非法";                //元素的数量要小于MaxSize
 8     for(int i=0;i<n;i++)
 9       data[i]=a[i];
10     length=n;
11 }
12 void SeqList::Insert(int i,int x)
13 {
14     if(length>=MaxSize) throw "上溢";
15     if(i<1||i>length+1) throw "位置非法";
16     for(int j=length;j>=i;j--)                        //将第j个元素存在数组下标为j-1处;
17       data[j]=data[j-1];
18     data[i-1]=x;
19     length++;
20 }
21 int SeqList::Delete(int i)
22 {
23     if(length==0) throw "下溢";
24     if(i<1||i>length) throw "位置非法";
25     int x=data[i-1];
26     for(int j=i;j<length;j++)
27       data[j-1]=data[j];
28     length--;
29     return x;
30 }
31 int SeqList::Locate(int x)
32 {
33     for(int i=0;i<length;i++)
34       if(data[i]==x) return i+1;                    //下标为i的元素的序号为i+1
35     return 0;                                       //找不到值为x的元素
36 }
37 void SeqList::PrintList()
38 {
39     for(int i=0;i<length;i++)
40       cout<<data[i]<<" ";
41     cout<<endl;
42 } 

SeqLis.cpp

③主函数文件SeqList_main.cpp:

 1 #include<iostream>
 2 using namespace std;
 3 #include"SeqList.h"                                //引入在.h文件中类的声明
 4
 5 int main()
 6 {
 7   int r[10]={5,7,2,0,1,5,1,0,0,7};                //老师要求将学号存入线性表
 8   SeqList L(r,10);
 9   cout<<"执行插入操作前数据为:"<<endl;
10   L.PrintList();
11   try
12   {
13     L.Insert(2,3);                                 //在第2个位置插入值为3的元素
14   }
15   catch (char *s)
16   {
17       cout<<s<<endl;
18   }
19   cout<<"执行插入操作后数据为:"<<endl;
20   L.PrintList();                                //输出所有元素
21   cout<<"值为3的元素位置为:";
22   cout<<L.Locate(3)<<endl;
23   cout<<"执行删除第一个元素操作,删除前数据为:"<<endl;
24   L.PrintList();
25   try
26   {
27     L.Delete(1);                                  //删除第1个元素
28   }
29   catch(char *s)
30   {
31       cout<<s<<endl;
32   }
33   cout<<"删除后数据为:"<<endl;
34   L.PrintList();
35   return 0;
36 }

SeqList_main.cpp

运行结果:

时间: 2024-08-13 07:17:09

顺序表(SeqList)的相关文章

数据结构C#版笔记--顺序表(SeqList)

线性结构(Linear Stucture)是数据结构(Data Structure)中最基本的结构,其特征用图形表示如下: 即:每个元素前面有且只有一个元素(称为"前驱"),同样后面有且只有一个元素(称为"后继")--注:起始元素的前驱认为是空,末尾元素的后继认为也是空,这样在概念上就不冲突了. 线性表(List)是线性结构的一种典型实现,它又可以分为:顺序表(SeqList)和链表(LinkList)二大类. 顺序表(SeqList)的基本特征为:元素在内部存储时

【数据结构】顺序表seqlist

#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct seqlistNode { int date; }seqlistNode; typedef struct SEQLIST { unsigned int lengh; //长度 unsigned int count; //已存元素长度 seqlistNode * date; //数据域 }seqlist; seqlist *

线性表之顺序表C++实现

线性表之顺序表 一.头文件:SeqList.h //顺序线性表的头文件#include<iostream> const int MaxSize = 100;//定义顺序表SeqList的模板类template<class DataType>class SeqList{public: //顺序表无参构造器(创建一个空的顺序表) SeqList(){ length = 0 } //顺序表有参构造器(创建一个长度为n的顺序表) SeqList(DataType array[], int

线性表-顺序表、链表类模板的实现(数据结构基础 第2周)

学习完课程后,自己用C++实现了简单的顺序表和链表,并用约瑟夫问题做了测试,不保证完全正确. 其中有一点需要注意一下:C++中类模板声明头文件和实现头文件不可以分离到.h和.cpp中,否则无法正常编译,详见:https://www.zhihu.com/question/20630104 源码 1.顺序表 //seqlist.h #pragma once #include <iostream> using namespace std; template <class T> class

顺序表实现增,删,查与合并操作

C语言实现顺序表的的基本操作 1.顺序表实现按照位置查找 #include <stdio.h> #include <stdlib.h> #define MAX_SIZE 20 // 需求: // 线性表查找之:按序号查找. // 表中的元素是顺序存放的,故核心语句应该是l.elem[i-1] // 定义一个顺序表 // 应该定义在外面,否则函数头声明访问不到 typedef struct{ int elem[MAX_SIZE]; int last; } SeqList; // 函数

C——顺序表(sequence list)

/* sequenceList.c */ /* 顺序表 */ /* 线性表的顺序存储是指在内存中用地址连续的一块存储空间顺序存放线性表中的各项数据元素,用这种存储形式的线性表称为顺序表. */ #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #define MAXSIZE 10 /* 顺序表结构 */ typedef struct { int data[MAXSIZE]; /* 数据列表 */ in

线性表---顺序表

线性结构的特点是:在非空的有限集合中,只有唯一的第一个元素和唯一的最后一个元素.第一个元素没有直接前驱元素,最后一个没有直接的后继元素.其它元素都有唯一的前驱元素和唯一的后继元素. 线性表是一种最简单的线性结构.线性表可以用顺序存储结构和链式存储结构存储,可以在线性表的任意位置进行插入和输出操作. 要想将线性表在计算机上实现,必须把其逻辑结构转化为计算机可识别的存储结构.线性表的存储结构主要有两种:顺序存储结构和链式存储结构. 线性表的顺序表示与实现 线性表的顺序存储结构 线性表的顺序存储结构指

模板实现顺序表

类模板的成员函数: 类模板的成员函数本身是一个普通函数.但是,类模板的每个实例都有其自己版本的成员函数.因此,类模板的成员函数具有和模板相同的模板参数.因此,在=定义在类模板之外的成员函数就必须以template开始,后跟类模板参数列表. 类模板中的友元函数: 类模板中的友元函数,应该在类中定义.若只在类中声明,在类外定义,则在链接时会出现错误. 类模板实现顺序表: "SeqList.h" //冒泡法 "test.cpp"

顺序表的非递减数列合并

#include<stdio.h> /*包含输入输出头文件*/ #define ListSize 100 typedef int DataType; typedef struct { DataType list[ListSize]; int length; }SeqList; void InitList(SeqList *L) /*将线性表初始化为空的线性表只需要把线性表的长度length置为0*/ { L->length=0; /*把线性表的长度置为0*/ } int ListEmpt