第十七章經典抽象資料型別(一)

2021-08-11 22:57:55 字數 3660 閱讀 5558

堆疊,沒什麼太多要總結的,主要是實現問題,這裡自己實現了一下,當然從書本中吸取到的是程式**效率的提公升和assert斷言的應用判斷。

**的提公升在於top_element的初值是0和1,對於push,pop本來就要改變的函式來說沒什麼變化,但是對於top這樣的函式,只需要返回其頂部資料,但是每一次都要-1的話,就會成為很大的困擾,彙編出來的時候,必然會減去1乘以這個陣列的型別大小,這就使得效率降低了。

程式如下所示:

"stack.h"

#ifndef stack_h

#define stack_h

/*********************鍊錶實現***************************/

struct node;

void create_stack();

void destory_stack();

void push(int a);

void pop();

bool is_empty();

bool is_full();

int top();

static node* stack;

/*********************動態陣列實現***************************/

//static int top_element = -1;

//static int* stack;

//static int stack_size;

//void create_stack(int size);

//void destory_stack();

//void push(int a);

//void pop();

//bool is_empty();

//bool is_full();

//int top();

#endif

stack.cpp

#include "stack.h"

#include #include #include /*********************鍊錶實現***************************/

bool is_empty()

bool is_full()

void create_stack();

void push(int a)

void pop()

void destory_stack()

int top()

/*********************動態陣列實現***************************/

//void create_stack(int size)

////void destory_stack()

////void push(int a)

////void pop()

////bool is_empty()

////bool is_full()

//int top()

test.cpp
#include "stack.h"

#include #include #include int main()

佇列實現的困擾在於,如果使用乙個陣列,我們不想浪費空間的話,之前離開佇列空出的位置必須用上,那麼怎麼獲得這個位置就非常重要了,最開始的想法簡單來說就是if(rear==size) rear = 0;這樣的想法換個方式實現,其實就是%size,所以rear的更新方程就是rear = (rear+1)%size;front也是,但是這個時候判斷佇列是否為空和滿就變得很困難,簡單判斷2者大小會發現,佇列滿的時候rear=front,但是佇列還有乙個元素的時候rear=front,所以根本無法判斷。

因此引入了2種方法去判斷是否為空為滿,

1、定義count表示現在含有元素的多少,非常簡單就可以判斷,

2、將整個陣列空出乙個來,不完全填滿,這樣當(rear+1)%size == front時就是空,(rear+2)%size == front時則滿。

queue.h

#ifndef queue_h

#define queue_h

#include /***************************動態陣列實現************************************/

//static int* queue;

//static int front = 1;

//static int rear = 0;

//static int queue_size;

//void create_queue(int size);

//void destroy_queue();

//void delete();

//void insert(int a);

//bool is_empty();

//bool is_full();

//int queue_front();

//int queue_last();

/***************************鍊錶實現************************************/

struct node;

void create_queue();

void destroy_queue();

void delete();

void insert(int a);

bool is_empty();

bool is_full();

node* queue_front();

node* queue_last();

static node* queue;

static node* last;

#endif

queue.cpp
#include "queue.h"

#include #include #include /***************************動態陣列實現************************************/

//void create_queue(int size)

////void destroy_queue()

////void delete()

////void insert(int a)

////bool is_empty()

////bool is_full()

////int queue_front()

//int queue_last()

void create_queue();

void destroy_queue()

void delete()

void insert(int a)

else

last->next = new_node;

last = new_node;

}bool is_empty()

bool is_full()

node* queue_front()

node* queue_last()

test.cpp
#include "queue.h"

#include #include #include int main()

第十七章經典抽象資料結構二 樹(陣列實現)

二叉搜尋樹插入 可以首先要判斷樹是不是為空 針對鍊錶結構是必須的,因為要分配動態記憶體 然後插入。有2種選擇,遞迴和迴圈,因為遞迴是尾部遞迴,犧牲了空間複雜度獲得了可讀性,可以轉換為迴圈。刪除結點 分為3種情況 1 刪除沒有孩子的結點,直接刪除 2 刪除只有乙個孩子的結點,刪除原有結點,指向孩子結點...

MySql的初學習 第十七章 元資料

部落格說明 除了表之外的資料都是元資料,可以分為三類 查詢結果資訊 update 或 delete語句 受影響的記錄數。資料庫和資料表的資訊 包含了資料庫及資料表的結構資訊。mysql伺服器資訊 包含了資料庫伺服器的當前狀態,版本號等。1.檢視伺服器當前狀態 show status 2.檢視mysq...

第十七節,基本資料型別,其他

enumerate iterable,start 0 自定義列表的下標開始位置 列表變數,要定義的開下標數 預設是0開始的 1 usr bin env python2 coding utf 8 3 a 電腦 滑鼠 鍵盤 顯示器 4 for k,v in enumerate a,1 因為是有鍵和值,所...