程式設計師成長之旅 順序表

2021-09-25 05:55:37 字數 4135 閱讀 8334

執行效果

靜態順序表是只適用於我們已經了解到需要存多少資料,而一般我們都是用動態順序表,下面我給大家展示一下我所實現的動態順序表的**。

seqlist.h

#define _crt_secure_no_warnings 1

#pragma once

#include

#include

#include

#include

#include

//順序表的靜態儲存

//#define n 100

typedef

int sldatatype;

////typedef struct seqlist

//seqlist;

//順序表的動態儲存

typedef

struct seqlist

seqlist;

void

seqlistinit

(seqlist* psl)

;void

seqlistdestory

(seqlist* psl)

;void

checkcapicity

(seqlist* psl)

;void

seqlistpushback

(seqlist* psl, sldatatype x)

;void

seqlistpopback

(seqlist* psl)

;void

seqlistpushfront

(seqlist* psl, sldatatype x)

;void

seqlistpopfront

(seqlist* psl)

;int

seqlistfind

(seqlist* psl, sldatatype x)

;void

seqlistinsert

(seqlist* psl, size_t pos, sldatatype x)

;void

seqlisterase

(seqlist* psl, size_t pos)

;void

seqlistremove

(seqlist* psl, sldatatype x)

;void

seqlistmodify

(seqlist* psl, size_t pos, sldatatype x)

;void

seqlistprint

(seqlist* psl)

;void

seqlistbubblesort

(seqlist* psl)

;int

seqlistbinaryfind

(seqlist* psl, sldatatype x)

;void

seqlistremoveall

(seqlist* psl, sldatatype x)

;

seqlist.c
#include

"seqlist.h"

//順序表的初始化

void

seqlistinit

(seqlist* psl)

psl->capicity =10;

psl->size =0;

}//釋放順序表

void

seqlistdestory

(seqlist* psl)

}//檢查順序表,看是否需要擴容

void

checkcapicity

(seqlist* psl)

memcpy

(ptmp, psl->array, psl->size *

sizeof

(sldatatype));

free

(psl->array)

; psl->array = ptmp;

psl->capicity = newcapicity;}}

//尾插

void

seqlistpushback

(seqlist* psl, sldatatype x)

//尾刪

void

seqlistpopback

(seqlist* psl)

//頭插

void

seqlistpushfront

(seqlist* psl, sldatatype x)

psl->array[0]

= x;

psl->size++;}

//頭刪

void

seqlistpopfront

(seqlist* psl)

psl->size--;}

//查詢某個元素

intseqlistfind

(seqlist* psl, sldatatype x)

}return-1

;}//在某個位置插入乙個元素

void

seqlistinsert

(seqlist* psl, size_t pos, sldatatype x)

psl->array[pos]

= x;

psl->size++;}

//在某個位置刪除乙個元素

void

seqlisterase

(seqlist* psl, size_t pos)

psl->size--;}

//移除乙個數

void

seqlistremove

(seqlist* psl, sldatatype x)

//在某個位置更改乙個數

void

seqlistmodify

(seqlist* psl, size_t pos, sldatatype x)

//展示順序表

void

seqlistprint

(seqlist* psl)

for(i =

0; i < psl->size; i++

)printf

("\n");

}//氣泡排序

void

seqlistbubblesort

(seqlist* psl)

if(count ==0)

}}}//二分查詢(時間複雜度:o(n) 空間複雜度 o(1))(只能是非遞迴)

intseqlistbinaryfind

(seqlist* psl,sldatatype x)

else

if(psl->array[mid]

> x)

else

if(psl->array[mid]

== x)

}return-1

;}//移除相同的乙個數字

void

seqlistremoveall

(seqlist* psl, sldatatype x)

else

} psl->size -

= count;

test.c
#include

"seqlist.h"

void

menu()

void

test()

case2:

case3:

case4:

case5:

case6:

case7:

case8:

case9:

case10:

case11:

case12:

case13:

case0:

default

:printf

("選擇有誤!請重新選擇!\n");

程式設計師成長之旅 設計迴圈佇列

設計你的迴圈佇列實現。迴圈佇列是一種線性資料結構,其操作表現基於 fifo 先進先出 原則並且隊尾被連線在隊首之後以形成乙個迴圈。它也被稱為 環形緩衝器 迴圈佇列的乙個好處是我們可以利用這個佇列之前用過的空間。在乙個普通佇列裡,一旦乙個佇列滿了,我們就不能插入下乙個元素,即使在佇列前面仍有空間。但是...

程式設計師成長之旅 二分查詢

最終 溢位問題在迴圈體中,一般計算中間值middle時所用的是 middle left right 2 但是這種情況容易溢位,因為一旦left right超過所在型別的範圍的話,就會出現錯誤,為了不出現這種問題,我們引入了 middle left right left 2 邊界問題 迴圈體外的初始化...

程式設計師成長之旅 類和物件中篇

析構函式 拷貝建構函式 賦值運算子過載 const成員 取位址及const取位址運算子過載 如果乙個類中什麼都沒有,我們都知道它是空類,但是空類是不是什麼事情都不做,答案當然是否定的,它會生成6個預設函式。概念建構函式是乙個特殊的成員函式,名字與類名相同,建立類型別物件時由編譯器自動呼叫,保證每個資...