1. 程式人生 > >資料結構 線性表

資料結構 線性表

一個先線性表是n個數據元素的有序序列。

這裡總結一下線性表的建立,插入,刪除,查詢。

#include <iostream>
using namespace std;
#include<stdlib.h>
#define ok 0
#define error -1
class Seqlist {
private:
    int *data;
    int maxsize;
    int size;
public:
    Seqlist()
    {
        maxsize = 1000;
        size = 0;
        data = new int[maxsize];
    }
    ~Seqlist()
    {
        delete[]data;
    }
    void create_List(int a[],int n)
    {
        int i;
        for (i = 0; i < n; i++)
            data[i] = a[i];
        size = i;
    }
    int list_size()
    {
 
    }
    int list_insert(int i, int item)
    {
        if (i<1||i>size+1)
            return error;
        for(int j=size;j>=i;j--)
        {
            data[j ] = data[j-1];
        }
        data[i - 1] = item;
        size++;
        return ok;   
    }
    int list_delete(int i)
    {
        if (i<1 || i>size)
            return error;
        for (int j = i; j < size; j++)
            data[j - 1] = data[j];
        size--;
        return ok;
    }
    int list_get(int i)
    {
        if (i<1 || i>size + 1)
            return error;
        cout << data[i - 1]<<endl;
        return ok;
    }
    void list_display()
    {
        cout << size<<" ";
        for (int i = 0; i < size; i++)
            cout<< data[i]<<" ";
        cout << endl;
    }
};
 
int main()
{
    Seqlist list;
    int  n;
    cin >> n;
    int a[1000];
    for (int i = 0; i < n; i++)
        cin >> a[i];
    list.create_List(a, n);
    list.list_display();
    //insert a number
    int insorder1, insnum1;
    cin >> insorder1 >> insnum1;
    if (list.list_insert(insorder1, insnum1)==0)
        list.list_display();
    else
        cout << "error" << endl;
 
    int insorder2, insnum2;
    cin >> insorder2 >> insnum2;
    if (list.list_insert(insorder2, insnum2) == 0)
        list.list_display();
    else
        cout << "error" << endl;
    //delete a number
    int deleteorder1,deleteorder2;
    cin >> deleteorder1;
    if (list.list_delete(deleteorder1) == 0)
        list.list_display();
    else
        cout << "error" << endl;
 
    cin >> deleteorder2;
    if (list.list_delete(deleteorder2) == 0)
        list.list_display();
    else
        cout << "error" << endl;
    //search a item;
    int searchorder1, searchorder2;
     
    cin >> searchorder1;
    int res1=list.list_get(searchorder1);
    if (res1 == -1)
        cout << "error" << endl;
     
    cin >> searchorder2;
    int res2 = list.list_get(searchorder2);
    if (res2 == -1)
        cout << "error" << endl;
    //system("pause");
}

首先是定義一個線性表的class,資料域包括一個數組,一個數組的長度和最大容納量.然後通過create_list的函式傳進來在主函式中已經輸入的陣列和陣列長度,然後一個個賦值給data陣列。

插入

首先明確的一點是位置是按一開始的,而我們的陣列是從0開始,而且因為這個是位置連續的,必須通過移動插入點以後的陣列項來騰出一個位置,然後騰出來的位置給我們想要插入的數字,然後長度加一。

刪除

首先判斷我們想要刪除的陣列項有沒有,如果有才進行刪除操作,刪除跟插入類似,通過覆蓋想要刪除的資料來達到刪除的目的。