堆疊,沒什麼太多要總結的,主要是實現問題,這裡自己實現了一下,當然從書本中吸取到的是程式**效率的提公升和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 因為是有鍵和值,所...