實驗三順序表以及靜態連結串列
1.順序表的實現
#include<iostream.h>
const int Maxsize=15;
class ScoreList
{
public:
void Insert(int i,int x);
int Delete(int i);
int Search(int x);
void Print();
ScoreList(){length=0;}
ScoreList(int a[],int n);
~ScoreList(){}
private:
int data[Maxsize];
int length;
};
ScoreList::ScoreList(int a[],int n)
{
if(n>Maxsize)throw"引數非法";
for(int i=0;i<n;i++)
data[i]=a[i];
length=n;
}
void ScoreList::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++;
}
int ScoreList::Delete(int i)
{
if(length==0)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;
}
int ScoreList::Search(int x)
{
for(int i=0;i<length;i++)
if(data[i]==x)
return i+1;
}
void ScoreList::Print()
{
for(int i=0;i<length;i++)
cout<<"成績:"<<data[i]<<" "<<endl;}
int main()
{
int b[5]={11,22,33,44,55};
ScoreList S(b,5);
cout<<"插入前資料為"<<endl;
S.Print();
cout<<"在第3個位置插入成績為66的元素"<<endl;
S.Insert(3,66);
cout<<"現資料為"<<endl;
S.Print();
cout<<"刪除第2個成績"<<endl;
S.Delete(2);
cout<<"現資料為"<<endl;
S.Print();
cout<<"查詢成績為55的位置"<<endl;
cout<<S.Search(55)<<endl;
return 0;}
2.靜態連結串列
#include<iostream.h>#include<string>
const int Maxsize = 100;
template<typename T>
class Node {
public:
T data;
int next; //儲存指向下一個節點的陣列下標
};
template <typename T>
class SLL {
public:
SLL();//無參建構函式
SLL(T score[],int n);//帶參建構函式
virtual ~SLL();//空的解構函式
void print();//遍歷操作
T get(int i);//按位查詢操作
int Locate(T x);//按值查詢操作
void insert(int i, T x);//插入操作
void Delete(int i);//刪除操作
private:
Node<T> node[Maxsize];//節點
int first;
int avail;//指向空閒鏈的頭指標
int length;//當前靜態連結串列的長度
};
template<typename T>
SLL<T>::SLL(T score[],int n)
{
length = 0;
for(int i = 0; i<Maxsize; i++)
{
node[i].next=i+1;
}
node[Maxsize - 1].next = -1;
avail = 2;
first = 1;
node[first].next = -1;
for (int j = n-1; j >=0; j--)
{
if (avail == -1)
{
break;
}
int s = avail;
avail = node[avail].next;//空閒鏈的頭指標後移
node[s].data = score[j];//將score[j]填入下標為S的節點
node[s].next = node[first].next;//將score[j]插到first後面
node[first].next = s;
length++;
}
}
template<class T>
SLL<T>::~SLL()
{
}
template<typename T>
void SLL<T>::print()
{
int s = node[first].next;
for (int i = 1; i <= length; i++)
{
cout << node[s].data << " ";
s = node[s].next;
}
}
template<typename T>
T SLL<T>::get(int i)
{
if(i<=0 || i>length) throw"位置非法";
int p = first;
for(int j = 0; j<i; j++)
{
p=node[p].next;
}
return node[p].data;
}
template<typename T>
int SLL<T>::Locate(T x)
{
int count=0;
int p = first;
while(node[p].next != -1)
{
p=node[p].next;
if(node[p].data == x) return count+1;
count++;
}
return -1;
}
template<typename T>
void SLL<T>::insert(int i, T x)
{
if(i<0||i>length) throw"位置非法";
int p = first;
for(int j = 1; j<i; j++)
{ p=node[p].next; }
int s = node[avail].next;
node[avail].data = x;
node[avail].next = node[p].next;
node[p].next = avail;
avail = s;
length++;
}
template<typename T>
void SLL<T>::Delete(int i)
{
if(i<0||i>length+1) throw"位置非法";
int p = first;
for(int j = 1;j<=i; j++)
{ p=node[p].next; }
int q = node[p].next;
T e = node[p].data;
node[p].next = node[q].next;
相關推薦
實驗三順序表以及靜態連結串列
1.順序表的實現 #include<iostream.h>const int Maxsize=15;class ScoreList{public: void Insert(int i,int x); int Delete(int i); int Search(int x); void
實驗三:用雙鏈表、靜態連結串列以及間接定址實現基本的學生管理系統
實驗目的:鞏固線性表的資料的儲存方法和相關操作,學會針對具體應用,使用線性表的相關知識來解決具體問題。 實驗內容:建立一個由n個學生成績的線性表,n的大小由自己確定,每個學生的成績資訊由自己確定,實現資料的對錶進行插入、刪除、查詢等操作。 (1)用雙鏈表實現 源程式: #incl
資料結構與演算法(三)-線性表之靜態連結串列
前言:前面介紹的線性表的順序儲存結構和鏈式儲存結構中,都有對物件地引用或指向,也就是程式語言中有引用或者指標,那麼在沒有引用或指標的語言中,該怎麼實現這個的資料結構呢? 一、簡介 定義:用陣列代替指標或引用來描述單鏈表,即用陣列描述的連結串列叫做靜態連結串列,這種描述方法叫做遊標實現法;
資料結構——線性表 (順序表、單鏈表、靜態連結串列、迴圈連結串列、雙向連結串列)
提示:以下內容不適合零基礎人員,僅供筆者複習之用。 一、線性結構的基本特徵: 1.集合中必存在唯一的一個“第一元素”; 2.集合中必存在唯一的一個 “最後元素”; 3.除最後元素在外,均有 唯一的後繼; 4.除第一元素之外,均有 唯一的前驅。 如:j
迴圈佇列(順序表實現,連結串列實現)
迴圈佇列 迴圈佇列是將順序佇列變為一個變成一個環狀的空間。頭尾指標以及佇列元素之間的關係不變,只是在迴圈佇列中,頭尾指標“依環狀增 1”的操作可用”模“運算來實現。通過取模運算,頭指標和尾指標就可以在順序表空間內以頭尾銜接的方式迴圈移動。 隊空條件:Q.front == Q.rear
順序表(陣列)與連結串列的區別
相關文件 演算法和資料結構系列 學習演算法和資料結構:線性結構 順序表 順序表一般視為陣列,使用一組地址連續的儲存單元依次儲存資料元素 順序表具有以下特點: 長度固定,必須在記憶體分配之前確定陣列長度; 儲存空間連續,即允許隨機訪問任意元素; 資料
資料結構實驗三順序表學生資訊
#include<iostream.h> class Student {private: char name[2000]; int number; int score; char sex[2000]; public: static int count; vo
詳述線性表(單鏈表,雙鏈表,靜態連結串列和迴圈連結串列)
線性表:由零個或多個數據元素組成的有限序列。 關鍵點: 有限序列第一個元素有且僅有一個前驅結點,最後一個與元素有且僅有一個後繼結點,中間元素有一個前驅結點和一個後繼結點線性表
線性表(陣列、單鏈表、靜態連結串列、迴圈連結串列、雙向連結串列)
線性表的定義 線性表(List):零個或多個數據元素的有限序列。 有幾個地方需要強調: 首先它是一個序列,也就是說元素之間是有順序的,若元素存在多個,則第一個元素無前驅,最後一個元素無後繼,其他每個元素都有且只有一個前驅和後繼。 然後線性表強調的是有限的。 最
【線性表】靜態連結串列
StaticLinkedList.h #ifndef STATICLINKEDLIST_H #define STATICLINKEDLIST_H #include<iostream> const int max_size = 1000; //list nod
資料結構實驗三靜態連結串列學生資訊
#include<iostream> #include<string> using namespace std; //靜態連結串列的儲存結構 c
實驗三 用靜態連結串列實現學生成績管理系統
#include<iostream.h> #include<stdlib.h> typedef int ElemType; typedef int DataType; const int MaxSize=100; typedef struct { ElemType data
java中的順序連結串列,單鏈表,雙鏈表,迴圈連結串列
今天昨天學了集合框架,但是在List介面下有兩個子類涉及到了連結串列,書上又提到了一個關鍵的詞“雙向迴圈連結串列”,折騰了一整天終於搞懂了。 首先我們得明白什麼是連結串列,連結串列是環環相扣的一組資料,而我們常用的陣列就是一組順序連結串列,在分配記憶體時記憶體將對陣列分配一組”連續的記憶體空間“
【資料結構與演算法】之單鏈表、雙鏈表、迴圈連結串列的基本介紹及其Java程式碼實現---第三篇
一、連結串列的基本介紹 連結串列的定義:連結串列是一種遞迴的資料結構,它或者為空(null),或者是指向一個結點(node)的引用,該結點含有一個泛型的元素和一個指向另一條連結串列的引用。----Algorithms Fourth Edition 常見的連結串
線性表-靜態連結串列
靜態連結串列 用陣列來代替指標,來描述單鏈表 將陣列元素分成兩個資料域,data和cur。data用來存放資料元素,cur存放該元素的後繼在陣列中的下標(遊標)。<遊標實現法> 1.基本結構 /*線性表的靜態連結串列儲存結構*/ #define
線性表的清空與線性表的銷燬有什麼區別 靜態連結串列與陣列的區別
線性表的清空: bool SqList::ClearList() { length=0; return true; } 線性表的銷燬: bool SqList::DestoryList() { delete []p; p=NULL; return true;
陣列、單鏈表和雙鏈表介紹 以及 雙向連結串列的C/C++/Java實現
1 #include <stdio.h> 2 #include <malloc.h> 3 4 /** 5 * C 語言實現的雙向連結串列,能儲存任意資料。 6 * 7 * @author skywang 8 * @date 2
線性表之連結串列的實現(二)-靜態連結串列實現
靜態連結串列基本概念 這一部分的內容主要參照了這篇帖子[靜態連結串列 C實現]的內容。並且貼上的說明圖也是來自於這篇帖子,再次特做宣告。 什麼是靜態連結串列 用全域性資料實現的連結串列叫做靜
靜態連結串列的建立以及基本操作
#include <stdio.h> #include <stdlib.h> #define Max 100 typedef int ElemType; /*定義每個節點的資料資訊*/ typedef struct Node { ElemType
資料結構筆記(三)靜態連結串列的實現和基本操作
一、靜態連結串列的定義 用資料替代指標,來描述單鏈表。首先,資料的元素由兩個資料域組成,data和cur。資料域data,用來存放資料元素,即要處理的資料;遊標cur相當於單鏈表中的next指標。 //線性表的靜態單鏈表儲存結構 #define MAXSIZ