#include "stdafx.h"
#include <iostream>
using namespace std;
const int MaxSize = 100;

class SeqList{                      //定义一个SeqList类
private:
 int data[MaxSize];              //存放数据元素的数组
 int length;                     //线性表的长度
public:
 SeqList(){length = 0;}          //无参构造函数,建立一个空的顺序表
 SeqList(int a[],int n);         //创建一个长度为n的顺序表;
 ~SeqList(){}                    //析构函数为空
 int Length(){return length;}    //求线性表的长度
 int Get(int i);                 //按位查找,在线性表中查找第i个元素
 int locate(int x);              //按值查找,在线性表中查找值为x的元素序号
 void Insert(int i,int x);       //插入操作,在线性表中第i个位置插入值为x的元素
 int Delete(int i);              //删除操作,删除线性表的第i个元素
 void printList();               //遍历操作,按序号依次输出各元素
};

SeqList::SeqList(int a[],int n){
 if(n>MaxSize) throw "参数非法";
 for(int i = 0;i<n;i++)
  data[i] = a[i];
 length = n;
}

int SeqList::Get(int i){
 if(i < 1 && i > length) throw "查找的范围非法";
 else
  return data[i-1];
}

int SeqList::locate(int x){
 for(int i = 0;i < length;i++)
  if(x == data[i])
   return i+1;
  return 0;
}

void SeqList::Insert(int i,int x){
 if(length>=MaxSize) throw "上溢";
 if(i<1||i>length+1) throw "位置";
 for(int j = length;j>=i;j--)
  data[j] = data[j-1];
 data[i-1] = x;
 length++;
 for(int j = 0;j<length;j++){
  cout<<data[j]<<" ";
 }
}

int SeqList::Delete(int i){
 if(length>=MaxSize) throw "下溢";
 if(i<1||i>length) throw "位置";
 int x =data[i-1];
 for(int j = i;j<=length;j++)
  data[j-1] = data[j];
 length--;
 return x;
}

void SeqList::printList(){
 for (int i = 0; i < length; i++){
  cout << data[i] <<" ";
 }
 cout << endl;
}

int _tmain(int argc, _TCHAR* argv[])
{
 int n;
 cin>>n;
 int * a = new int[n];                 //动态创建数组a;
 for(int i = 0;i < n;i++){             //输入元素
  cin >> a[i];
 }
 SeqList example(a,n);                 //定义一个SeqList 的对象,并初始化
 cout<<"数组的长度  ";
 cout<<example.Length()<<endl;   
 cout<<"输入要查找的元素位置   ";
 int i;
 cin>>i;
 cout<<example.Get(i)<<endl;
 cout<<"在第j个元素插入数字x输入j,x   ";
 int j,x;
 cin>>j>>x;
 example.Insert(j,x);
 cout<<endl;
 cout<<"查找数值为y的元素下标输入y   ";
 int y;
 cin>>y;
 cout<<example.locate(y)<<endl;
 cout<<"删除第m个元素输入m   ";
 int m;
 cin>>m;
 cout<<example.Delete(m)<<endl;
 cout<<"打印SeqList对象      ";
 example.printList();
 delete a;
 return 0;
}

单链表(c++)的更多相关文章

  1. 时间复杂度分别为 O(n)和 O(1)的删除单链表结点的方法

    有一个单链表,提供了头指针和一个结点指针,设计一个函数,在 O(1)时间内删除该结点指针指向的结点. 众所周知,链表无法随机存储,只能从头到尾去遍历整个链表,遇到目标节点之后删除之,这是最常规的思路和 ...

  2. 单链表的C++实现(采用模板类)

    采用模板类实现的好处是,不用拘泥于特定的数据类型.就像活字印刷术,制定好模板,就可以批量印刷,比手抄要强多少倍! 此处不具体介绍泛型编程,还是着重叙述链表的定义和相关操作.  链表结构定义 定义单链表 ...

  3. Java实现单链表的各种操作

    Java实现单链表的各种操作 主要内容:1.单链表的基本操作 2.删除重复数据 3.找到倒数第k个元素   4.实现链表的反转   5.从尾到头输出链表 6.找到中间节点 7.检测链表是否有环 8.在 ...

  4. [LeetCode] Linked List Cycle II 单链表中的环之二

    Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Foll ...

  5. c++单链表基本功能

    head_LinkNode.h /*单链表类的头文件*/#include<assert.h>#include"compare.h"typedef int status; ...

  6. 单链表、循环链表的JS实现

    数据结构系列前言: 数据结构作为程序员的基本知识,需要我们每个人牢牢掌握.近期我也展开了对数据结构的二次学习,来弥补当年挖的坑......   当时上课的时候也就是跟着听课,没有亲自实现任何一种数据结 ...

  7. C代码实现非循环单链表

    C代码实现非循环单链表, 直接上代码. # include <stdio.h> # include <stdlib.h> # include <malloc.h> ...

  8. 分离的思想结合单链表实现级联组件:CascadeView

    本文介绍自己最近做省市级联的类似的级联功能的实现思路,为了尽可能地做到职责分离跟表现与行为分离,这个功能拆分成了2个组件并用到了单链表来实现关键的级联逻辑,下一段有演示效果的gif图.虽然这是个很常见 ...

  9. 数据结构:单链表结构字符串(python版)添加了三个新功能

    #!/urs/bin/env python # -*- coding:utf-8 -*- #异常类 class stringTypeError(TypeError): pass #节点类 class ...

  10. 数据结构:单链表结构字符串(python版)改进

    此篇文章的replace实现了字符串类的多次匹配,但依然有些不足. 因为python字符串对象为不变对象,所以replace方法并不修改原先的字符串,而是返回修改后的字符串. 而此字符串对象时用单链表 ...

随机推荐

  1. 【Struts2学习笔记-3】常量配置

    Struts2常量 配置Struts2常量值有3个地方,1)在struts.properties文件中配置常量:2)在web.xml文件中配置FileterDispatcher指定初始化参数来配置常量 ...

  2. bzoj1966: [Ahoi2005]VIRUS 病毒检测

    Description 科学家们在Samuel星球上的探险仍在继续.非常幸运的,在Samuel星球的南极附近,探险机器人发现了一个巨大的冰湖!机器人在这个冰湖中搜集到了许多RNA片段运回了实验基地.科 ...

  3. bzoj3319: 黑白树

    Description 给定一棵树,边的颜色为黑或白,初始时全部为白色.维护两个操作:1.查询u到根路径上的第一条黑色边的标号.2.将u到v    路径上的所有边的颜色设为黑色.Notice:这棵树的 ...

  4. android学习笔记23——菜单

    菜单在桌面应用程序中使用非常广泛,由于手机屏幕的制约,菜单在手机应用中减少不少. android应用中的菜单默认是不可见的,只有当用户单击手机上“Menu”键时,系统才会显示该应用关联的采用项. an ...

  5. SQL执行效率和性能测试方法

    对于做管理系统和分析系统的程序员,复杂SQL语句是不可避免的,面对海量数据,有时候经过优化的某一条语句,可以提高执行效率和整体运行性能.如何选择SQL语句,本文提供了两种方法,分别对多条SQL进行量化 ...

  6. 正则表达式(BREs,EREs,PREs)差异比较

    我想各位也和我一样,再linux下使用grep,egrep, awk , sed, vi的搜索时,会经常搞不太清楚,哪此特殊字符得使用转义字符'\' ..   哪些不需要, grep与egrep的差异 ...

  7. 判断apache是否启动的脚本

    #!/bin/bashhttp=$(netstat -tunpl | awk '{printf $4 "\n"}' | grep '80$')if [ -z "$http ...

  8. 使用SparkSQL实现多线程分页查询并写入文件

    一.由于具有多张宽表且字段较多,每个宽表数据大概为4000万条,根据业务逻辑拼接别名,并每张宽表的固定字段进行left join 拼接SQL.这样就能根据每个宽表的主列,根据每个宽表的不同字段关联出一 ...

  9. 白书 4.1.2 模运算的世界 P291

    1.逆元 这里有个注意事项要说,就是当要求 (a-b)%m 的时候要注意不能直接 (a%m-b%m)%m 原因是得出的值有可能是负数,所以 (a%m-b%m+m)%m 才是正确的. //x,y是引用 ...

  10. CF 369C . Valera and Elections tree dfs 好题

    C. Valera and Elections   The city Valera lives in is going to hold elections to the city Parliament ...