線性表之順序表C++實現

来源:http://www.cnblogs.com/zfc-java/archive/2017/04/02/6659639.html
-Advertisement-
Play Games

線性表之順序表 一、頭文件:SeqList.h //順序線性表的頭文件#include<iostream> const int MaxSize = 100;//定義順序表SeqList的模板類template<class DataType>class SeqList{public: //順序表無參構 ...


線性表之順序表

一、頭文件:SeqList.h

//順序線性表的頭文件
#include<iostream>

const int MaxSize = 100;
//定義順序表SeqList的模板類
template<class DataType>
class SeqList{
public:
  //順序表無參構造器(創建一個空的順序表)
  SeqList(){ length = 0 }
  //順序表有參構造器(創建一個長度為n的順序表)
  SeqList(DataType array[], int n);
  //順序表析構函數
  ~SeqList(){}
  //求順序表的長度
  int GetLength(){ return length; }
  //順序表按位查找,返回i位置的元素
  DataType GetElement(int i);
  //順序表按值查找,返回該元素所在的位置
  int GetLocal(DataType x);
  //順序表在指定的位置插入指定的元素
  void Insert(int i, DataType x);
  //順序表刪除元素,返回刪除的元素
  DataType Delete(int i);
  //輸出順序表中的元素
  void PrintSeqList();
private:
  //一維數組,存放數據元素
  DataType data[MaxSize];
  //順序表的長度
  int length;
};

//實現順序表有參構造器
template<class DataType>
SeqList<DataType>::SeqList(DataType array[], int n)
{
  if (n > MaxSize)
  {
    throw "傳入的順序表長度過長";
  }
  //給順序表的存儲元素的數組賦值
  for (int i = 0; i < n; i++)
  {
    data[i] = array[i];
  }
  //給順序表的長度賦值
  length = n;
}

//實現順序表按位查找
template<class DataType>
DataType SeqList<DataType>::GetElement(int i)
{
  //判斷是定的位置是否合理
  if (i < 1 || i >length)
  {
    throw "位置有誤";
  }
  else
  {
    //返回指定位置的元素
    return data[i - 1];
  }
}

//實現順序表按值查找,返回該元素所在的位置
template<class DataType>
int SeqList<DataType>::GetLocal(DataType x)
{
  //遍歷順序表的元素
  for (int i = 0; i < length; i++)
  {
    //判斷指定的元素是否在順序表中
    if (data[i] == x)
    {
      //返回指定元素在順序表中的位置
      return (i + 1);
    }
  }
  //如果指定的元素不在順序表中,則返回位置為0
  return 0;
}

//實現順序表插入元素
template<class DataType>
void SeqList<DataType>::Insert(int index, DataType x)
{
  //判斷插入的位置是否合理
  if (length >= MaxSize)
  {
    throw "順序表已存放滿";
  }
  if (index<1 || index>length + 1)
  {
    throw "插入元素的位置有誤";
  }
  //如何插入的位置合理,則把順序表中從最後位置到指定插位置的元素整體向後移動一個位置
  for (int j = length; j >= index; j--)
  {
    data[j] = data[j - 1];
  }
  //給插入的位置放入指定的元素
  data[index - 1] = x;
  length++;
}

//實現順序表刪除指定位置的元素
template<class DataType>
DataType SeqList<DataType>::Delete(int index)
{
  //聲明要取出的元素
  DataType x;
  //判斷要刪除的位置是否合理
  if (index<1 || index>length)
  {
    throw "刪除的位置有誤";
  }
  else
  {
    //取出指定位置的元素
    x = data[index-1];
    //將指定位置後的元素全部都向前移動一個位置
    for (int i = index; i < length; i++)
    {
      data[i - 1] = data[i];
    }
    //刪除順序表中的元素後,其長度減1
    length--;
  }
  return x;
}

//順序輸出順序表中的元素
template<class DataType>
void SeqList<DataType>::PrintSeqList()
{
  if (length < 1)
  {
    throw "順序表中沒有元素";
  }
  else
  {
    //順序輸出順序表元素
    for (int i = 0; i < length; i++)
    {
       cout << data[i] << " ";
    }
    cout << endl;
  }
}

 二、測試線性表之順序表:TestSeqList.cpp

 

#include<iostream>
#include"SeqList.h"
using namespace std;
void show()
{
  cout << "---------------------------------------" << endl;
}
int main()
{
  int array[10] = {1,3,4,2,5,6,8,7,9,10};
  SeqList<int> seqList = SeqList<int>(array,10);
  cout << "順序表為:" << endl;
  seqList.PrintSeqList();
  show();
  cout << "順序表的長度為:" << seqList.GetLength()<< endl;
  cout << "第三個位置的元素是:" << seqList.GetElement(3) << endl;
  cout << "元素3的位置是:" << seqList.GetLocal(3) << endl;
  show();
  cout << "在第5個位置插入元素22" << endl;
  seqList.Insert(5, 22);
  cout << "順序表為:" << endl;
  seqList.PrintSeqList();
  cout << "順序表的長度為:" << seqList.GetLength() << endl;
  show();
  cout << "刪除第5個位置的元素" << endl;
  seqList.Delete(5);
  cout << "順序表為:" << endl;
  seqList.PrintSeqList();
  cout << "順序表的長度為:" << seqList.GetLength() << endl;
  show();
  return 0;
}

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. class和typename意義相同的例子 問題:在下麵的模板聲明中class和typename的區別是什麼? 答案:沒有任何區別。當聲明一個模板類型參數時,class和typename意味著相同的事情。一些程式員喜歡使用class,因為容易敲打。其他的(包括我)更加喜歡使用typename, ...
  • 線性表之單鏈表 一、頭文件:LinkedList.h //單鏈表是用一組任意的存儲單元存放線性表的元素,這組單元可以是連續的也可以是不連續的,甚至可以是零散分佈在記憶體中的任意位置。//單鏈表頭文件#include<iostream>using namespace std;//定義單鏈表結點-結構體類 ...
  • 本文重點總結了編程學習方法,常用的dos命令,java三大技術架構,jdk和jre和jvm的關係以及path和classpath的區別。重點是jdk和jre和jvm的關係以及path和classpath的區別。 ...
  • 題目鏈接 Problem Description MG is a rich boy. He has n apples, each has a value of V(0<=V<=9). A valid number does not contain a leading zero, and these ...
  • 資料庫連接池類,用於獲取資料庫連接。利用單例模式保證所有的連接都只通過一個連接池管理。 DBUtil類,包裝DBPool,簡化使用 測試代碼,和不使用連接池的情況做對比 ...
  • 希望對大家學習或者使用python3能具有一定的參考價值。 __abs__ #返回一個數的絕對值 >>> num3=-22 >>> num3.__abs__() 22 __add__ #兩數相加 __and__ #兩數按位與操作 __bool__ #求一個數的布爾值 >>> num1=4 >>> n ...
  • 不要62 時間限制:1sec 記憶體限制:3MB 題目描述 杭州人稱那些傻乎乎粘嗒嗒的人為62(音:laoer)。 杭州交通管理局經常會擴充一些計程車車牌照,新近出來一個好消息,以後上牌照,不再含有不吉利的數字了,這樣一來,就可以消除個別計程車司機和乘客的心理障礙,更安全地服務大眾。不吉利的數字為所有含有 ...
  • 12:變幻的矩陣 12:變幻的矩陣 查看 提交 統計 提問 查看 提交 統計 提問 總時間限制: 1000ms 記憶體限制: 65536kB描述 有一個N x N(N為奇數,且1 <= N <= 10)的矩陣,矩陣中的元素都是字元。這個矩陣可能會按照如下的幾種變幻法則之一進行變幻(只會變幻一次)。 現 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...