[考研408數據結構]王道大題暑假自用復習記錄(每日更新...)

DAY1 2025年6月29日 雨轉晴🌧🌤

第二章 線性表

2.2線性表的順序表示

1、從順序表中刪除具有最小值的元素(假設唯一)并由函數返回被刪元素的值。空出的位置由最后一個元素填補,若順序表為空,則顯示出錯信息并推出運行。

【思路】/*首先應該判空,空則顯示出錯,并推出;再遍歷整個順序表,找最小值,并記錄位置,遍歷完成后用最后一個元素補到原來這個最小值元素的位置上。*/
bool Del_min(SqList &L,ElemType &value){  //value 返回值if(L.length==0)  return false;value = L.data[0];int index = 0;for(int i =1;i<L.length;i++){if(L.data[i]<value){value = L.data[i];index = i;}L.data[index]=L.data[L.length-1];L.length--;return true;
}

2、設計一個高效算法,將順序表L的所有元素逆置,要求算法的空間復雜度為O(1)。

/*題目要求空間復雜度為O(1),也就是輔助空間為常數級,那數組是不行的了,所以考慮temp變量暫時存放,然后前半和后半對應位置對調即可*/
/*例如1,2,3,4,5 需要逆置,那將前半段和后半段對應位置對調——1,5;2,4;3,就可以得到54321*/void Reverse(SqList &L){ElemType temp;for(int i = 0 ; i<L.length/2 ; i++){temp = L.data[i];L.data[i]=L.data[L.length-i-1];L.data[L.length-i-1]=temp;}
}

3、對長度為n的順序表L,編寫一個時間復雜度為O(n),空間復雜度為O(1)的算法,該算法刪除順序表中所有值為x的數據元素。?

/*【思路】設cnt=0,每次循環如果有x就cnt++,沒有則,讓當前元素往前移動cnt個位置。*/void Del_X(SqList &L,ElemType x){int cnt  = 0;i = 0;while(i<L.length){if(L.data[i]==x){cnt++;}else{L.data[i-cnt] = L.data[L];}i++;L.length = L.length-cnt;}
}

DAY2 2025年6月30日 晴🌤

1、從順序表中刪除其值在給定值s和t之間(包含s和t,要求s<t)的所有元素,若s或t不合理或順序表為空,則顯示出錯信息并推出運行。

/*【思路】先判空,空則返回false;未異常則遍歷順序表,然后如果遍歷時元素大小在s,t之間,那么cnt++。用以表示要刪除的個數,方便后邊的不在s,t之間的元素前移覆蓋,從而達到刪除的效果*/bool Del_s_t(SqList &L,ElemType s,ElemType t){int i,cnt=0;if(L.length==0||s>=t){   //判空,不能s>=treturn false;}for(i = 0;i<L.length;i++){if(L.data[i]>=s&&L.data[i]<=t){cnt++;}else{L.data[i-cnt]=L.data[i];  //前移k個位置}}L.length-=cnt;return true;
}


2.從有序順序表中刪除所有其值重復的元素,使表中所有元素的值均不同。?

/*【思路】有序順序表,重復的元素一定是在相鄰的位置。所以記錄第一個元素后,然后依次判斷后面的元素是否與前面非重復的有序表的最后一個元素相同。若相同,繼續往后走;不相同就插入到非重復有序表的最后。*/bool Del_Same(SqList &L){if(L.length==0){return false;}int i ,j //i表示第一個不相同的元素,j當作指針遍歷后面的元素for(i = 0,j=1; j<L.length;j++){if(L.data[i]!=L.data[j]) L.data[++i] = L.data[j];}L.length = i+1;return true;
}

3.?將兩個有序順序表合并成為一個新的有序順序表,并由函數返回結果順序表。?

/*超級經典!!!【思路】將兩個有序順序表,每次都比較,然后存放較小的那個值。這兩個順序表總有一個先達到length,然后將剩下那個直接搬到總表中*/bool Merge(SqList A,SqList B,SqList &C){if(A.length+B.length>C.maxSize){return false;}int i,j,k=0;while(i<A.length&&j<B.length){  //小的先存if(A.data[i]<=B.data[j]){C.data[k++] = A.data[i++];}else{C.data[k++] = B.data[j++];}}while(i<A.length){     //剩余的一個直接搬過來C.data[k++] = A.data[i++];}while(j<B.length){C.data[k++] = B.data[j++];}C.length = k;return true;
}

DAY3 2025年7月1日 晴轉雨?🌤🌧

單鏈表上基本操作的實現

1、單鏈表初始化

/*帶頭節點*/
bool InitList(LinkList &L){L = (LNode*)malloc(sizeof(LNode));//創建頭節點L->next = NULL;return true;
}/*不帶頭節點*/
bool InitList(LinkList &L){L = NULL;return true;
}

2、求表長操作

/*記錄單鏈表表中數據結點的個數*/
//帶頭結點
int Length(LinkList L){int len = 0 ;LNode *p=L;while(p->next!=NULL){p = p->next;len++;
}return len;
}//不帶頭結點
int Length(LinkList L){int len =0;LNode *p =L ;while(p!=NULL){len++;p = p->next;}return len;
}

3、按序查找

/*沿著next域找,O(n)*/
LNode *GetElem(LinkList L,int i){LNode *p=L;int j  = 0;while(p!=NULL&&j<i){p = p-next;j++;
}return p; //p為第i個結點或者是null
}

4、按值查找

/*要用結點的data域和定值e比較。O(n)*/
//帶頭結點
LNode *LocateElem(LinkList L,ElemType e){LNode *p =L->next;while(p!=NULL&&p->data!=e){p = p->next;
}return p;
}

5、插入結點操作

/*插入到第i個位置,就需要在第i-1個后面進行插入*/
/*s->next = p->next; p-next = s*/
bool ListInsert(LinkList &L,int i ,ElemType e){LNode *p = L;int j = 0;while(p!=NULL&&j<i-1){ //找到第i-1個位置,準備在其后面插入新結點成為第i個。p = p->next;j++;}if(p==NULL) return false;LNode *s = (LNode*)malloc(sizeof(LNode));//新插入結點建立s->data = e;s->next = p->next;p->next =s;return true;
}/*還可以用交換數據域,將前插變為后插*/
s->next = p->next;
p->next = s;
tmp = p->data;
p->data = s->data;
s->data = tmp;

6、刪除結點操作

/*刪除要記得釋放空間*/
/*p是被刪結點的前驅,q是被刪的結點*/
bool ListDelete(LinkList &L,int i,ElemType &e){LNode *p = L;int j = 0;while(p->next!=NULL&&j<i-1){p = p->next;j++;}if(p->next ==NULL||j>i-1){return false;
}LNode *q = p->next;e = q->data;p->next = q->next;free(q);return true;
}

7.?頭插法建立單鏈表(鏈表逆置)

/*讀入數據的順序和生成的鏈表中元素的順序是相反的,每個結點插入為O(1),設單鏈表長為n,則總時間復雜度為O(n)*/
LinkList List_HeadInsert(LinkList &L){LNode *s;int x;L = (LNode*)malloc(sizeof(LNode));L->next = NULL;scanf("%d",&x);while(x!=11408){s = (LNode*)malloc(sizeof(LNode));s->data = x;s->next = L->next;L->next = s;scanf("%d",&x);}return L;
}

8.尾插法建立單鏈表?

LinkList List_TailInsert(LinkList &L){int x;L = (LNode*)malloc(sizeof(LNode));LNode *s ,*r = L;scanf("%d",&x);while(x!=11408){s = (LNode*)malloc(sizeof(LNode));s->data =x;r->next =s;r = s;scanf("%d",&x);}r->next = NULL;return L;
}

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/87117.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/87117.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/87117.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue2 el-select下拉選擇框 點擊其他位置或者彈窗關閉下拉框/點擊取消時,下拉框變成之前的值

1.elSelect點擊空白處無法收起下拉框&#xff08;失去焦點并隱藏&#xff09; // 定義指令 directives: {clickOutside: {bind: function (el, binding, vnode) {el.clickOutsideEvent function (event) { // here I check that click was outside the el and his childrensif…

MYSQL-JAVAweb1

1.登錄 在黑框中輸入 net start mysql // 啟動mysql服務 net stop mysql // 停止mysql服務1.MySQL數據模型 關系型數據庫&#xff1a; 關系型數據庫是建立在關系模型基礎上的數據庫&#xff0c;簡單說&#xff0c;關系型數據庫是由多張能互相連接的 二維表 組成的數據庫 如…

將POD指定具體機器上運行

在Kubernetes中&#xff0c;你可以通過多種方式將Pod調度到指定的節點&#xff08;機器&#xff09;上運行。以下是幾種常用的方法及其適用場景&#xff1a; 1. NodeSelector&#xff08;簡單標簽匹配&#xff09; 通過標簽選擇器將Pod綁定到具有特定標簽的節點。 步驟 為目…

eNSP實驗一:IPv4編址及IPv4路由基礎

一、實驗目的&#xff1a; 配置各路由器上的物理接口的IP地址并實現互聯互通配置各路由器的 Loopback 的IP地址并實現互聯互通&#xff08;包括備份路由&#xff0c;默認路由&#xff09;圖中三個路由器型號為 AR3620。 二、配置物理接口ip 基礎配置 設備命名<Huawei>…

基于自然語言處理(NLP)的Twitter情感分析系統

本課題致力于構建一個基于自然語言處理&#xff08;NLP&#xff09;與機器學習技術的Twitter情感分析系統&#xff0c;旨在自動識別用戶推文中的主觀情緒傾向&#xff0c;如正面、負面或中性。研究過程中將對海量Twitter文本數據進行預處理&#xff0c;包括去除噪聲、分詞、詞性…

H.264中片數據分割(Slice Data Partitioning)介紹

H.264中**片數據分割&#xff08;Slice Data Partitioning&#xff09;**的解碼機制。讓我為您詳細解析&#xff1a; 1. 片數據&#xff08;Slice Data Partitioning&#xff09;分割的概念 片數據分割是H.264中的一種錯誤恢復機制&#xff0c;通過將片數據分成不同的部分&am…

muduo

好的&#xff0c;我們來深入剖析陳碩老師開發的著名C網絡庫——muduo。它以“簡單、高效、易用”著稱&#xff0c;是學習Linux C高性能網絡編程的絕佳范本。我會盡量詳細、通俗地講解其核心思想、關鍵組件、源碼結構和工作原理。 核心思想&#xff1a;Reactor 模式 (Non-block…

將目錄下所有圖像中非0像素值改為1或者255

圖像二值化處理技術大綱 目標與背景 解釋圖像二值化的意義,分析將非零像素值統一調整為1或255的應用場景(如簡化數據、增強特征、適配模型輸入等)。 核心方法概述 列舉常見圖像格式(如PNG、JPEG)的像素值范圍,說明非零像素的定義(RGB或灰度圖像中的非黑像素)。 方…

Reactor ConnectableFlux支持多訂閱者

在 Reactor 中&#xff0c;ConnectableFlux 是一種用于處理響應式流的機制&#xff0c;它允許你控制何時開始訂閱和數據生成。通常情況下&#xff0c;訂閱者&#xff08;subscriber&#xff09;在訂閱時會立即開始接收數據&#xff0c;但有時你可能希望多個訂閱者“會面”&…

vite + vue 項目下使用 tailwindcss

版本 node: > 18.0.0 vue: 3.5.13 vite: 6.3.1 tailwindcss: 4.1.6 tailwindcss/vite: 4.1.6 tailwindcss ? 細粒度類庫 提供數千個原子級CSS類&#xff08;如 text-center、bg-blue-500、p-4&#xff09;&#x1f9e9; 組合式開發 通過類名組合構建完全自定義的UI&#x…

Hibernate中save與saveOrUpdate的差異解析

在Hibernate中&#xff0c;save()和saveOrUpdate()都是用于持久化對象的方法&#xff0c;但它們的適用場景和行為有顯著差異&#xff1a; 1. save()方法 核心行為&#xff1a; 僅適用于瞬時態&#xff08;Transient&#xff09;對象&#xff08;即新創建、未與Session關聯的對象…

香橙派3B學習筆記14:deb 打包程序_解包前后腳本運行

本文學習如何用deb打包的方式打包自己需要調用系統庫的程序。 然后實現deb解包前后的腳本運行。 目錄 承接上文&#xff1a; 刪除上文遺留的.so文件&#xff1a; 終止ledlight進程&#xff1a; 目標解釋&#xff1a; 創建項目結構&#xff1a; 創建control文件&#xff1a; 創…

nanoGPT復現——prepare拆解(自己構建詞表 VS tiktoken)

在nanoGPT的data文件夾有兩個很相似的文件夾結構&#xff1a;shakespeare和shakespeare-char&#xff0c;這兩種都是對shakespeare數據集的處理&#xff0c;但是shakespeare使用的是tiktoken對文字進行編碼&#xff0c;另一個則是使用自己構建的詞表 一、shakespeare-char&…

macos 安裝 xcode

在 macOS 上安裝 Xcode&#xff08;或者 Xcode Command Line Tools&#xff09;的方法如下&#xff1a; 1. 安裝 Xcode Command Line Tools&#xff08;輕量級&#xff0c;滿足大部分編譯需求&#xff09; 終端命令&#xff1a; xcode-select --install會彈出安裝提示&#x…

大學專業科普 | 云計算、大數據

大數據專業是近年來隨著信息技術發展而興起的熱門學科&#xff0c;專注于從海量、多樣化的數據中提取有價值信息&#xff0c;為各行業提供數據驅動的決策支持。 專業定義 大數據專業旨在培養掌握大數據采集、存儲、管理、分析和應用等核心技術的人才。該專業融合了計算機科學…

本地文件自動提交到倉庫

背景 將本地目錄做一個存儲倉庫&#xff0c;將歸檔的文件放入其中。自動同步到遠程倉庫。 倉庫配置 省略 配置密鑰 用戶可以 git pull \ git push \ git commit 自動 拉取、更新 腳本 文件名&#xff1a;autosave.sh #!/bin/zsh# 設置變量 LOCAL_DIR$1# 進入工作目錄 cd "…

Ubuntu中控制用戶存儲空間配置步驟

目的&#xff0c;限制用戶磁盤空間占用&#xff0c;例如給用戶限制100-150G容量 1.安裝磁盤配額工具 sudo apt-get install -y quota 2.備份并修改/etc/fstab文件&#xff0c;使能支持quota sudo cp /etc/fstab /etc/fstab.bak vim /etc/fstab #寫入如下,usrjquotaaquota.u…

【網絡】Linux 內核優化實戰 - net.ipv4.tcp_rmem 和 net.core.rmem_default 關系

net.ipv4.tcp_rmem 和 net.core.rmem_default 都是 Linux 內核中控制網絡接收緩沖區的參數,但它們的作用范圍、優先級和使用場景存在明顯區別。以下是詳細對比: 核心區別 參數net.ipv4.tcp_rmemnet.core.rmem_default作用協議僅針對 TCP 協議針對 所有網絡協議(TCP、UDP 等…

設計模式精講 Day 14:命令模式(Command Pattern)

【設計模式精講 Day 14】命令模式&#xff08;Command Pattern&#xff09; 文章內容 在“設計模式精講”系列的第14天&#xff0c;我們來學習命令模式&#xff08;Command Pattern&#xff09;。命令模式是一種行為型設計模式&#xff0c;它將請求封裝為對象&#xff0c;從而…

手機射頻功放測試學習(二)——手機線性功放的靜態電流和小信號(S-Parameter)測試

目錄 一、概要 二、LPA的電流測試 1、LPA的泄漏電流測試 手動測試步驟如下: 自動化測試: 2、LPA的靜態電流測試 手動測試步驟如下: 自動化測試: 三、LPA的S-Parameter測試 1、矢量網絡分析儀校準 2、LPA的S參數手動測試步驟: 3、LPA的S參數自動測試步驟: 四…