日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

delphi7存储过程传入数组_数据结构线性表之顺序存储 类的封装

發布時間:2023/12/19 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 delphi7存储过程传入数组_数据结构线性表之顺序存储 类的封装 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

自己編程也挺久的了,然而數據結構這塊是很弱的部分,然而這個東西對編程又異常重要,雖然這么久我一直沒感受到。所以最近集中學習一下。正好手里有一本大話數據結構,就按照該書的順序往下學習。

開始學習之前,要了解幾個概念,如時間復雜度和空間復雜度,具體概念就不羅列,大家可直接百度。

下面是線性表的定義:零個或多個數據元素的有限序列。

順序存儲:用一段地址連續的存儲單元依次存儲線性表的數據元素。

也就是這次說的順序存儲,大家自然就會想到數組。Ok,接下來我們就使用C++來封裝一個類,實現線性表的一些操作。

一般對數據操作都是增刪改查,我們以這幾個操作為核心,再擴充幾個其他操作,如初始化線性表、線性表是否為空、判斷某一元素的位置等操作。其實這里面這些操作主要就是插入與刪除,其他的都很好理解。

開發環境:Ubuntu Qt

類的組成:common.h 一些宏定義、數據結構、

SeqList類的頭文件與源文件

  • common.h
  • namespace seqlist_namespace

    {

    #define OK 0

    #define ERROR 1

    #define MAXSIZE 100 /* 存儲空間初始分配量 */

    typedef int ElemType; /* ElemType類型根據實際情況而定,這里假設為int */

    typedef struct

    {

    ElemType data[MAXSIZE]; /* 數組,存儲數據元素 */

    int length; /* 線性表當前長度 */

    }SqList;

    }

    2.頭文件

    class SeqList

    {

    public:

    SeqList();

    ~SeqList();

    public:

    int initList(seqlist_namespace::SqList *L);

    int isListEmpty(const seqlist_namespace::SqList& L);

    int clearList(seqlist_namespace::SqList *L);

    int listLength(const seqlist_namespace::SqList& L);

    //list existed, return element by position i,

    //first element means array cursor is 0

    int getElem(const seqlist_namespace::SqList& L, const int i, seqlist_namespace::ElemType *e);

    //list existed,search first is e element

    int locateElem(const seqlist_namespace::SqList& L, const seqlist_namespace::ElemType e);

    //

    int listInsert(seqlist_namespace::SqList *L, const int i, const seqlist_namespace::ElemType e);

    //

    int listDelete(seqlist_namespace::SqList *L, const int i, seqlist_namespace::ElemType *e);

    int listTraverse(seqlist_namespace::SqList& L);

    };

    3. 源文件

    int SeqList::listInsert(seqlist_namespace::SqList *L, const int i,

    const seqlist_namespace::ElemType e)

    {

    if(MAXSIZE == L->length)

    return ERROR;

    if(i < 1 || i > L->length+1)

    return ERROR;

    if(i <= L->length)

    {

    for(int j=L->length-1; j>=i-1; j--)

    L->data[j+1] = L->data[j];

    }

    L->data[i-1] = e;

    L->length++;

    return OK;

    }

    int SeqList::listDelete(seqlist_namespace::SqList *L, const int i,

    seqlist_namespace::ElemType *e)

    {

    if(0 == L->length)

    return ERROR;

    if(i < 1 || i > L->length)

    return ERROR;

    if(i < L->length)

    {

    for(int j=i-1; j!=L->length-1; j++)

    {

    L->data[j] = L->data[j+1];

    }

    }

    *e = L->data[i-1];

    L->length--;

    return OK;

    }

    當需要修改元素時,傳入線性表指針;如果不需要修改則傳入線性表引用變量。

    簡單說下插入和刪除。

    插入數據時,涉及到數據元素向后移動,所以找到元素最大下標(L.length - 1)的數據,之后將其后移一個位置,以此類推,直到移動完所有元素。之后進行插入操作。

    刪除數據時,找到要刪除元素的下標(i -1),將它后繼元素(i-1+1)前移,以此類推。

    4. 主函數中測試程序

    seqlist_namespace::SqList sqlist;

    seqlist_namespace::ElemType element;

    SeqList L;

    L.initList(&sqlist);

    for(int i = 0; i < 5; i++)

    L.listInsert(&sqlist, 1, i);

    L.listTraverse(sqlist);

    int ret = 0;

    ret = L.locateElem(sqlist,4);

    std::cout << "locate " << ret << std::endl;

    ret = L.isListEmpty(sqlist);

    std::cout << "isEmpty" << ret << std::endl;

    L.getElem(sqlist, ret, &element);

    std::cout << "getElement" << element << std::endl;

    L.listDelete(&sqlist, 1, &element);

    L.listTraverse(sqlist);

    效果圖:

    5. 小結

    從實現上講,主要是插入、刪除部分的標準以及線性表的一些狀態的判斷,如表是否為空、表是否為滿、插入數據位置的合理性等。

    從重要性講,它很重要,雖然現在還沒感覺出來。

    學習貴在堅持和不斷總結。

    程序中還有很多不足,希望大家不吝指正,需要整個Qt的工程的同志可在公眾號后臺留言。

    歡迎關注公眾號: Pou光明

    總結

    以上是生活随笔為你收集整理的delphi7存储过程传入数组_数据结构线性表之顺序存储 类的封装的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。