線性表的順序表示與實現

2021-09-30 09:53:26 字數 2732 閱讀 2687

/*	線性表是有n個元素的非空有限序列

存在惟一的乙個被稱作「第乙個」資料的元素

存在惟一的乙個被稱作「第後乙個」資料的元素

除第乙個與最後乙個之外,其它元素都存在唯一的乙個前驅和唯一的乙個後續

複雜的線性表中的元素可以由多個資料項組成

同乙個線性表中的元素型別必須相同

線性表的順序表,是用一組位址連續的儲存單元依次儲存線性表的資料元素

演算法複雜度:取表長與訪問表中的的元素為o(1),插入與刪除的時間複雜度為o(n)

順序表適用於頻繁訪問,只有較少(或不進行)「插入刪除操作」 */

#ifndef sqlist_h

#define sqlist_h

#define maxsize 100 //順序表的最大儲存容量

#define infinity 65535 //設定為β

typedef int elemtype; //順序表的資料型別,自定義

typedef struct sqlist;

void initlist(sqlist *q); //初始化順序表

void getelem(sqlist *q,int i,elemtype *e); //返回元素,將第i個位置的元素存入*e

void getlistlength(sqlist *q,int *len); //返回順序表的長度,將長度存入*len

void insertlist(sqlist *q,int i,elemtype e); //在第i個位置插入e,最壞的情況下i為第乙個位置,時間複雜度為o(n)

void deletelist(sqlist *q,int i,elemtype *e); //刪除第i個位置的元素,將刪除的元素存入*e,最壞情況i為第乙個位置

//時間複雜度為o(n)

int locateelem(sqlist *q,elemtype e); //在順序表中查詢元素e是否存在,不存在返回-1,否則返回所在的位置

#endif //sqlist_h

#include "sqlist.h"

#include #include void initlist(sqlist *q) //初始化順序表

void getelem(sqlist *q,int i,elemtype *e) //獲取第i個位置的元素(下標值從零開始,i個位置的元素在表中位置為i-1)

void insertlist(sqlist *q,int i,elemtype e) //在順序表的第i個位置插入元素e

for(int j = q->len - 1;j >= i - 1;--j)//將i個位置與i之後的所有元素向後移一位(下標值從零開始i - 1)

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

q->data[i - 1] = e; //將元素插入到順序表中,下標值從零開始

++q->len; //增加當前順序表的長度值

}void deletelist(sqlist *q,int i,elemtype *e) //將順序表中第i個位置的元素刪除,將刪除的元素存入*e

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

for(int j = i - 1;j < q->len - 1;++j) //第i個位置之後的所有元素向後移

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

--q->len; //當前的順序表長度減1

}int locateelem(sqlist *q,elemtype e) //在順序表中查詢元素e,如果找到返回位置,否則返回-1

return -1;

}

#include "sqlist.h"

#include int main()

i = 2; //第順序表的第2個位置插入元素

fflush(stdin); //清空緩衝區,確保輸入正確

printf("請輸入要在第2個位置插入的元素\n");

scanf("%d",&element);

insertlist(&q,i,element);

printf("順序表的內容為:\n");

for(int j = 0;j < q.len;++j)

printf("%d ",q.data[j]);

printf("\n");

int e; //用於存入被刪除的元素

printf("請輸入要刪除的元素的位置\n");

fflush(stdin);

scanf("%d",&i);

deletelist(&q,i,&e);

printf("被刪除的元素為:%d\n",e);

printf("順序表的內容為:\n");

for(int j = 0;j < q.len;++j)

printf("%d ",q.data[j]);

printf("\n");

printf("請輸入要在表中查詢的元素:\n");

fflush(stdin);

scanf("%d",&element);

if((i = locateelem(&q,element)) == -1)

printf("順序表中不存在元素:%d\n",element);

else

printf("在順序表的第%d個位置找到元素:%d\n",i,element);

return 0;

}

線性表的順序表示與實現 順序表

一.順序表的定義 用一組位址連續的儲存單元依次存放線性表的結點,由此得到的線性表簡稱為順序表 sequential list 二.結點ai的儲存位址 假設表中每個結點占用c個儲存單元,其中第乙個單元的儲存位址作為該結點的儲存位址,並設表中開始結點a1的儲存位址 簡稱為基位址 是loc a1 那麼結點...

線性表的順序表示與實現

include include include define true 1 define false 0 define ok 1 define error 0 define infeasible 1 define overflow 2 typedef int status typedef int e...

1 1線性表的順序表示與實現

線性表的順序儲存指的是將線性表中的元素存放在一組連續的儲存單元中,這樣使得在邏輯上是相鄰的,物理儲存上也是相鄰的。採用順序儲存結構的線性表稱為順序表。順序表反應了線性表中元素的邏輯關係,只要知道第乙個元素的儲存位址就能得到線性表中任何乙個元素的儲存位址。同樣已知任何乙個元素的儲存位址都可以得到其他元...