資料結構 不定長順序表

2021-10-23 08:55:46 字數 3233 閱讀 5531

順序表是在計算機記憶體中以陣列的形式儲存的線性表,所以順序表的儲存結構和陣列非常類似,而它最顯要的特點就是邏輯位址和實體地址都相連。

alterlist.h

#pragma once

/*#pragma once是乙個比較常用的c/c++預處理指令,只要在標頭檔案的最開始加入這條預處理指令,就能夠保證標頭檔案只被編譯一次。*/

typedef int elentype;//重新命名int為elentype

#define size 10;//不定長順序表的初始大小

typedef struct alterlist

alterlist ;

void createlist(alterlist* p);//順序表的初始化

void addspace(alterlist* p);//擴大順序表的空間

void insertinhead(alterlist* p,elentype val);//頭插法

void insertintail(alterlist* p, elentype val);//尾插法

void insertinpos(alterlist* p, elentype val,int pos);//任意位置插

void printlist(alterlist* p);//列印順序表

void deleteinhead(alterlist* p);//頭刪

void deleteintail(alterlist* p);//尾刪

void deleteinpos(alterlist* p, int pos);//按位置刪

void deleteelement(alterlist* p, elentype val);//刪除重複元素

int findinpos(alterlist* p, elentype val);//根據元素查位置

int findincondition(alterlist* p, elentype val, bool(*compare)(elentype, elentype));//根據條件查詢

void reverselist(alterlist* p);//逆置

void clearlist(alterlist* p);//清空順序表

void destroy(alterlist* p);//銷毀順序表

接著就是這些函式的實現:

alterlist.cpp

#include"alterlist.h"

#include#include#include#include#includestatic bool isfull(alterlist* p)//判斷順序表是否已滿

static bool isempty(alterlist* p)//判斷順序表是否為空

void createlist(alterlist* p)//順序表的初始化

p->count = 0;

p->size = size;

p->data = (elentype*)malloc(sizeof(elentype) * p->size);

}void addspace(alterlist* p)//擴大順序表的空間

void insertinhead(alterlist* p, elentype val)//頭插法

void insertintail(alterlist* p, elentype val)//尾插法

void insertinpos(alterlist* p, elentype val, int pos)//任意位置插

int i = p->count;

while (i > pos)

p->data[pos] = val;

p->count++;

}void printlist(alterlist* p)//列印順序表

printf("\n");

}void deleteinhead(alterlist* p)//刪除頭

void deleteintail(alterlist* p)//刪除尾

void deleteinpos(alterlist* p, int pos)//按位置刪除

p->count--;

}void deleteelement(alterlist* p, elentype val)//刪除重複元素

else if (p->data[j] != val)

i++;

j++;

} }p->count -= (j - i);

}int findinpos(alterlist* p, elentype val)//根據元素查位置

} return -1;

}int findincondition(alterlist* p, elentype val, bool(*compare)(elentype, elentype))//根據條件查詢

} return -1;

}void reverselist(alterlist* p)//逆置

}void clearlist(alterlist* p)//清空

void destroy(alterlist* p)//銷毀

測試用例

main.cpp

#include#include"alterlist.h"

bool compare(int a,int b)

int main()

printlist(& p);

insertintail(&p, 100);

printlist(&p);

insertinpos(&p, 200, 3);

printlist(&p);

reverselist(&p);

printlist(&p);

deleteinpos(&p, 3);//按位置刪

printlist(&p);

deleteelement(&p, 100);//刪除重複元素

printlist(&p);

insertintail(&p, 5);

printlist(&p);

printf("%d\n", findincondition(&p, 5, compare));

destroylist(&p);

return 0;

}

資料結構 順序表(二) 不定長順序表

一 匯入 二 儲存結構 與定長的順序表的儲存結構相比較,不定長的順序表只增加乙個元素listsize 用於記錄當前順序表的總長度 具體結構如下圖所示 結構定義 typedef struct dseqlist int elem 指向存放資料的動態陣列 int length 有效資料個數 int lis...

資料結構 不定長順序棧

1 棧 stack 又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧 入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素 從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其...

資料結構,定長順序表

typedef struct seqlist 定長順序表 seqlist,pseqlist 44 初始化順序表ps void initseqlist pseqlist ps pseqlist seqlist ps length 0 有效資料個數為0 判斷順序表是否為滿 static bool isf...