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