資料結構與演算法(五)
malloc函式動態記憶體分配和釋放
#include <stdio.h> #include <malloc.h> int main(void) { int a[5] = {1,2,3,4,5};//靜態記憶體分配 int len; printf("請輸入陣列的長度:len = "); scanf("%d",&len); int * b = (int *)malloc(sizeof(int)*len);//malloc函式向作業系統請求sizeof(int)*len這麼大的記憶體空間,作業系統返回給它這塊記憶體空間的首個位元組的地址,所以需要用指標變數來接受malloc函式的返回值,int *代表這塊記憶體空間每個元素所佔位元組數。 for (int i = 0;i<len;i++) //scanf("%d",(b+i)); scanf("%d",&b[i]); for (i = 0;i<len;i++) printf("%d\n",*(b+i)); free(b); return 0; }
相關推薦
資料結構與演算法(五)-線性表之雙向連結串列與雙向迴圈連結串列
前言:前面介紹了迴圈連結串列,雖然迴圈連結串列可以解決單鏈表每次遍歷只能從頭結點開始,但是對於查詢某一節點的上一節點,還是頗為複雜繁瑣,所以可以在結點中加入前一個節點的引用,即雙向連結串列 一、簡介 雙向連結串列:在連結串列中,每一個節點都有對上一個節點和下一個節點的引用或指標,即從一個節點出發可以有
資料結構與演算法(五)圖結構
瞭解圖的實現方法,然後從遍歷角度將圖轉化為樹。進而,利用基本資料結構並基於遍歷模式,設計圖演算法的主要方法。最後,從“資料結構決定遍歷次序”出發,概括遍歷演算法。實現選擇和改進資料結構,從而高效實現圖演算法。 1.圖結構含義 圖包含頂點集合V,邊集合E。均為有限集。根據邊有無方向分為無向圖,
資料結構與演算法(五)
malloc函式動態記憶體分配和釋放 #include <stdio.h> #include <malloc.h> int main(void) { int a[5] = {1,2,3,4,5};//靜態記憶體分配 int len; printf("請輸入
資料結構與演算法(二)--遞迴
遞迴條件: 1.遞迴條件:每次調自己,然後記錄當時的狀態 2.基準條件:執行到什麼時候結束遞迴,不然遞迴就會無休止的呼叫自己, 遞迴的資料結構:棧(先進先出)和彈夾原理一樣,每一次呼叫自己都記錄了當時的一種狀態,然後把這種狀態的結果返回。 棧相對應的資料結構:佇列(先進後出
資料結構與演算法(2)—— 棧(java)
1 棧的實現 1.1 簡單陣列實現棧 package mystack; public class ArrayStack { private int top; //當前棧頂元素的下標 private int[] array; public ArraySt
python資料結構與演算法(1)
資料結構與演算法(Python) Why?我們舉⼀個可能不太恰當的例⼦:如果將開發程式的過程⽐喻為作戰,我們碼農便是指揮作戰的將軍,⽽我們 所寫的程式碼便是⼠兵和武器。那麼資料結構和演算法是什麼?答⽈:兵法!我們可以不看兵法在戰場上⾁搏,如此,可能會勝利,可能會失敗。即使勝 利,可能也會付出巨⼤的代價。我們寫
python資料結構與演算法(6)
Python中的順序表Python中的list和tuple兩種型別採⽤了順序表的實現技術,具有前⾯討論的順 序表的所有性質。tuple是不可變型別,即不變的順序表,因此不⽀持改變其內部狀態的任何操 作,⽽其他⽅⾯,則與list的性質類似。list的基本實現技術Python標準型別list就是⼀種元素個數可變的
python資料結構與演算法(10)
棧棧(stack),有些地⽅稱為堆疊,是⼀種容器,可存⼊資料元素、訪問元 素、刪除元素,它的特點在於只能允許在容器的⼀端(稱為棧頂端指標,英 語:top)進⾏加⼊資料(英語:push)和輸出資料(英語:pop)的運算。 沒有了位置概念,保證任何時候可以訪問、刪除的元素都是此前最後存⼊的 那個元素,確定了⼀種預
python資料結構與演算法(9)
指定位置插⼊節點 def insert(self, pos, item): """在指定位置新增節點""" if pos <= 0:
python資料結構與演算法(8)
連結串列與順序表的對⽐連結串列失去了順序表隨機讀取的優點,同時連結串列由於增加了結點的指標域,空 間開銷⽐較⼤,但對儲存空間的使⽤要相對靈活。連結串列與順序表的各種操作複雜度如下所示:注意雖然表⾯看起來複雜度都是 O(n),但是連結串列和順序表在插⼊和刪除時進 ⾏的是完全不同的操作。連結串列的主要耗時操作是遍
python資料結構與演算法(7)
單鏈表的操作is_empty() 連結串列是否為空 length() 連結串列⻓度 travel() 遍歷整個連結串列add(item) 連結串列頭部新增元素 append(item) 連結串列尾部新增元素 insert(pos, item) 指定位置新增元素 remove(item) 刪除節點 search
python資料結構與演算法(11)
佇列佇列(queue)是隻允許在⼀端進⾏插⼊操作,⽽在另⼀端進⾏刪除操作的 線性表。佇列是⼀種先進先出的(First In First Out)的線性表,簡稱FIFO。允許插⼊ 的⼀端為隊尾,允許刪除的⼀端為隊頭。佇列不允許在中間部位進⾏操作! 假設佇列是q=(a1,a2,……,an),那麼a1就是隊頭元素,
python資料結構與演算法(12)
排序與搜尋排序演算法(英語:Sorting algorithm)是⼀種能將⼀串資料依照特定順序進⾏ 排列的⼀種演算法。排序演算法的穩定性穩定性:穩定排序演算法會讓原本有相等鍵值的紀錄維持相對次序。也就是如 果⼀個排序演算法是穩定的,當有兩個相等鍵值的紀錄R和S,且在原本的列表 中R出現在S之前,在排序過的列表
python資料結構與演算法(13)
選擇排序選擇排序(Selection sort)是⼀種簡單直觀的排序演算法。它的⼯作原理如 下。⾸先在未排序序列中找到最⼩(⼤)元素,存放到排序序列的起始位 置,然後,再從剩餘未排序元素中繼續尋找最⼩(⼤)元素,然後放到已排 序序列的末尾。以此類推,直到所有元素均排序完畢。選擇排序的主要優點與資料移動有關。如
python資料結構與演算法(15)
選擇排序選擇排序(Selection sort)是⼀種簡單直觀的排序演算法。它的⼯作原理如 下。⾸先在未排序序列中找到最⼩(⼤)元素,存放到排序序列的起始位 置,然後,再從剩餘未排序元素中繼續尋找最⼩(⼤)元素,然後放到已排 序序列的末尾。以此類推,直到所有元素均排序完畢。選擇排序的主要優點與資料移動有關。如
python資料結構與演算法(20)
⼆叉樹的遍歷樹的遍歷是樹的⼀種重要的運算。所謂遍歷是指對樹中所有結點的資訊的訪 問,即依次對樹中每個結點訪問⼀次且僅訪問⼀次,我們把這種對所有節點 的訪問稱為遍歷(traversal)。那麼樹的兩種重要的遍歷模式是深度優先遍 歷和⼴度優先遍歷,深度優先⼀般⽤遞迴,⼴度優先⼀般⽤佇列。⼀般情況下 能⽤遞迴實現的
python資料結構與演算法(19)
⼆叉樹⼆叉樹的基本概念⼆叉樹是每個節點最多有兩個⼦樹的樹結構。通常⼦樹被稱作“左⼦樹”(left subtree)和“右⼦樹”(right subtree)⼆叉樹的性質(特性)性質1: 在⼆叉樹的第i層上⾄多有2^(i-1)個結點(i>0) 性質2: 深度為k的⼆叉樹⾄多有2^k - 1個結點(k>
python資料結構與演算法(18)
樹與樹演算法樹的概念樹(英語:tree)是⼀種抽象資料型別(ADT)或是實作這種抽象資料型別 的資料結構,⽤來模擬具有樹狀結構性質的資料集合。它是由n(n>=1)個 有限節點組成⼀個具有層次關係的集合。把它叫做“樹”是因為它看起來像⼀ 棵倒掛的樹,也就是說它是根朝上,⽽葉朝下的。它具有以下的特點:每個節
資料結構與演算法(三)—— 連結串列(python)
1 反轉連結串列(一) 反轉一個單鏈表 class Solution(object): def reverseList(self, head): """ :type head: ListNode :
資料結構與演算法(一)--- 資料結構與演算法概念
一、資料結構 資料結構是計算機儲存、組織資料的方式。(資料結構是指資料與資料之間的關係。) 資料結構是指相互之間存在一種或多種特定關係的資料元素的集合。通常情況下,精心選擇的資料結構可以帶來更高的執行或者儲存效率。資料結構往往同高效的檢索演算法和索引技術有關。