DLinkList.h頭文件
#ifndef DLINKLIST_H_H #define OK 0 #define ERROR -1 typedef int type; typedef struct DLNode { type elem; struct DLNode *prior; struct DLNode *next; }*DLinkList, DLNode; int init_dlinkList(DLinkList*); int create_dlinkList(DLinkList); int print_dlinkList_forward(DLinkList); int print_dlinkList_backward(DLinkList); int length_linkList(DLinkList); int insert_dlinkList(DLinkList, int, type); int get_elem(DLinkList, int, DLNode**); int delete_linkList(DLinkList, type, type*); int clear_dlinkList(DLinkList); int destroy_dlinkList(DLinkList*); #endif
DLinkList.cpp文件
#include "DLinkList.h" #include <stdio.h> #include <stdlib.h> int make_node(DLNode **node) { if(!((*node) = (DLNode*)malloc(sizeof(DLNode)))) return ERROR; return OK; } //initial circulate double linklist int init_dlinkList(DLinkList *dlist) { if(!(*dlist = (DLinkList)malloc(sizeof(DLNode)))) return ERROR; (*dlist)->next = *dlist; (*dlist)->prior = *dlist; (*dlist)->elem = 0; return OK; } //create circulate double linklist int create_dlinkList(DLinkList dlist) { if(dlist == NULL) return ERROR; type num; DLNode *node; DLNode *tmp = dlist; printf("input num: "); scanf("%d",&num); while(num != 0) { if(make_node(&node)) return ERROR; node->elem = num; node->prior = tmp; node->next = tmp->next; tmp->next = node; tmp = node; node = NULL; dlist->elem++; scanf("%d",&num); } dlist->prior = tmp; tmp->next = dlist; return OK; } int print_dlinkList_forward(DLinkList dlist) { if(dlist == NULL || dlist->next == dlist) return ERROR; DLNode *tmp = dlist->next; while(tmp->next != dlist) { printf("%d ",tmp->elem); tmp = tmp->next; } printf("%d/n",tmp->elem); return OK; } int print_dlinkList_backward(DLinkList dlist) { if(dlist == NULL || dlist->next == dlist) return ERROR; DLNode *tmp = dlist->prior; while(tmp->prior != dlist) { printf("%d ",tmp->elem); tmp = tmp->prior; } printf("%d/n",tmp->elem); return OK; } int length_linkList(DLinkList dlist) { if(dlist->next == NULL || dlist == NULL) return 0; return dlist->elem; } int get_elem(DLinkList dlist, int i, DLNode **e) { if(dlist->next == dlist || dlist == NULL) return ERROR; if(i < 0 || i >= dlist->elem) return ERROR; DLNode *tmp = dlist; while((i--) >= 0) { tmp = tmp->next; } *e = tmp; return OK; } int insert_dlinkList(DLinkList dlist, int i, type e) { if(dlist == NULL) return ERROR; if(i < 0 || i > dlist->elem) return ERROR; DLNode *node; if(make_node(&node)) return ERROR; node->elem = e; if(0 == i) { node->next = dlist->next; node->prior = dlist; dlist->next->prior = node; dlist->next = node; } else if(dlist->elem == i) { DLNode *tmp = dlist; tmp = tmp->prior; node->next = tmp->next; node->prior = tmp; tmp->next->prior = node; tmp->next = node; } else { DLNode *tmp = dlist; while((i--) > 0) { tmp = tmp->next; } node->next = tmp; node->prior = tmp->prior; tmp->prior->next = node; tmp->prior = node; } dlist->elem++; return OK; } int delete_linkList(DLinkList dlist, type v, type *e) { if(dlist == NULL || dlist->next == NULL) return ERROR; DLNode *tmp = dlist->next; DLNode *tmp1 = NULL; while(tmp != dlist && tmp->elem != v) { tmp = tmp->next; } *e = tmp->elem; tmp1 = tmp->prior; tmp->next->prior = tmp1; tmp1->next = tmp->next; free(tmp); dlist->elem--; return OK; } int clear_dlinkList(DLinkList dlist) { if(dlist == NULL || dlist->next == NULL) return ERROR; DLNode *tmp = dlist->next; DLNode *tmp1 = NULL; while(tmp != dlist) { tmp1 = tmp; tmp = tmp->next; free(tmp1); } dlist->elem = 0; dlist->next = dlist; dlist->prior = dlist; return OK; } int destroy_dlinkList(DLinkList *dlist) { if(dlist == NULL) return ERROR; clear_dlinkList(*dlist); free(*dlist); (*dlist) = NULL; return OK; }
本文分享自華爲雲社區《GaussDB SQL基本語法示例-CASE表達式》,作者:Gauss松鼠會小助手2。 一、前言 SQL是用於訪問和處理數據庫的標準計算機語言。GaussDB支持SQL標準(默認支持SQL2、SQL3和SQL4的主要
本文分享自華爲雲社區《GaussDB SQL基礎語法示例-BOOLEAN表達式》,作者:Gauss松鼠會小助手2。 一、前言 SQL是用於訪問和處理數據庫的標準計算機語言。GaussDB支持的SQL標準(默認支持SQL2、SQL3和SQL
本文介紹了 InnoDB 支持哪幾類表鎖,以及它們分別都用在什麼場景下,還介紹了其中兩類表鎖爲什麼要存在。 作者:操盛春,愛可生技術專家,公衆號『一樹一溪』作者,專注於研究 MySQL 和 OceanBase 源碼。 愛可生開源社區出品,
本文分享自華爲雲社區《【MySQL技術專欄】MySQL8.0直方圖介紹》,作者:GaussDB 數據庫。 背景 數據庫查詢優化器負責將SQL查詢轉換爲儘可能高效的執行計劃,但因爲數據環境不斷變化導致優化器對查詢數據瞭解的不夠充足,可能無法
每篇一句 大魔王張怡寧:女兒,這堆金牌你拿去玩吧,但我的銀牌不能給你玩。你要想玩銀牌就去找你王浩叔叔吧,他那銀牌多 前言 爲了講述好Spring MVC最爲複雜的數據綁定這塊,我前面可謂是做足了功課,對此部分知識此處給小夥伴留一個學
作者:vivo 互聯網數據庫團隊- Qiu Xinbo 本文主要通過圖示介紹了用主鍵進行分片查詢的過程,介紹了主鍵分頁查詢存在SQL性能問題,如何去創建高效的索引去優化主鍵分頁查詢的SQL性能問題 對於數據分佈不均
JSON簡介: JSON(Java Script Object Notation)是一種輕量級的數據交換格式,通常用於在不同系統之間傳輸數據。它基於 JavaScript 對象語法,但已成爲一種獨立於語言的格式。JSON 數據以鍵值對的形式
一、簡單介紹: CaffeineCache和Guava的Cache是應用廣泛的本地緩存。 在開發中,爲了達到降低依賴、提高訪問速度的目的。會使用它存儲一些維表接口的返回值和數據庫查詢結果,在有些場景下也會在分佈式緩存上再加上一層本地緩存,
作者:vivo 互聯網大前端團隊 - Ma Lian 本文主要描述了FileProvider,startAnyWhere實現,Parcel不對稱漏洞以及這三者結合產生的漏洞利用實戰,另外闡述了漏洞利用的影響和修復預防措施,這個漏洞波及了
Impala目前支持Hadoop中幾種常見的文件格式 Parquet 、 ORC 、 Text 、 Avro 、 RCFile 和 SequenceFile 。下面簡要說明各種格式的使用、限制和一些注意事項。 不同的文件格式有着不同的適用場
原方法 /** * 動態更新form * @param form */ updateForm(form) { this.form.manholeId = form.manholeId; this.form
詳解 binlog 時間戳與 exec_time 的關係。 作者:李錫超,蘇商銀行DBA,負責數據庫和中間件運維和建設。擅長 MySQL、Python、Oracle,愛好騎行、技術研究和分享。 愛可生開源社區出品,原創內容未經授權不得隨意
背景 最近領導分配了個任務,測試sit環境一些功能相比之前慢了許多,需要優化一下。 問題排查過程 瀏覽器F12查看相關接口的響應,看到底是哪個接口反應慢,根據互聯網的要求,頁面3秒還沒有顯示出來,用戶體驗會非常差。 查看相關代碼的提交
O2OA(翱途)開發平臺[下稱O2OA開發平臺或者O2OA]的消息機制允許開發者通過配置實現郵件通知。本篇主要闡述如何實現待辦消息的郵件通知。 一、先決條件: 1、O2Server服務器正常運行,系統安裝部署請參考
前言 作爲表格產品的典型應用場景之一,幾乎所有的行業都會存在類 Excel 報表開發這樣的應用場景,而在這些應用場景中,經常會遇見下面的這些痛點: 報表數據往往來自多個不同的數據源,需要報表系統能夠同時連接多個數據源,並融合不同的數據格式