算法設計學習6

實驗目的及要求:
目標是使學生學會分析數據對象的特點,掌握數據組織的方法和在計算機中的存儲方式,能夠對具體問題中所涉及的數據選擇合適的邏輯結構、存儲結構,進而在此基礎上,對各種具體操作設計高效的算法,培養良好的程序設計技能。

實驗設備環境:
1.微型計算機
2.DEV C++(或其他編譯軟件)

實驗步驟:
任務一:
編寫算法實現帶頭結點單鏈表的就地逆置,即利用原帶頭結點單鏈表的結點空間把元素序列 a0,al,……,an-i 逆置為 an-1,……,al, a0?
[程序參數設計] 定義了一個帶頭結點的單鏈表結構體,并提供了初始化、尾部插入、打印、就地逆置和釋放鏈表的函數。在主函數中,首先初始化鏈表,然后添加一些元素,打印原始鏈表,執行就地逆置,最后打印逆置后的鏈表并釋放鏈表的空間。
代碼如下:

#include<stdio.h>
#include<malloc.h>
typedef int DataType;
#include "LinList.h"
int main(void){SLNode*head,*p,*q,*temp;int i,j,x;ListInitiate(&head);for(i=0;i<10;i++)ListInsert(head,i,i+1);printf("原來鏈表:"); for(i=0;i<ListLength(head);i++){ListGet(head,i,&x);printf("%d  ",x);}printf("\n");for(i=1;i<=ListLength(head)-1;i++){temp=head;p=head->next;q=p->next;for(j=1;j<=ListLength(head)-i&&q!=NULL;j++){temp->next=q;temp=q;p->next=q->next;q->next=p;q=p->next;}}		printf("當前鏈表:");for(i=0;i<ListLength(head);i++){ListGet(head,i,&x);printf("%d  ",x);}Destroy(&head);
}
頭文件:typedef struct Node{DataType data;struct Node *next;
}SLNode;
void ListInitiate(SLNode**head){*head=(SLNode *)malloc(sizeof(SLNode));(*head)->next=NULL;
}
int ListLength(SLNode *head){SLNode *p=head;int size=0;while(p->next!=NULL){p=p->next;size++;}return size;
}
int ListInsert(SLNode *head,int i,DataType x){SLNode *p,*q;int j;p=head;j=-1;while(p->next!=NULL&&j<i-1){p=p->next;j++;}if(j!=i-1){printf("插入元素位置參數錯!");return 0;}q=(SLNode *)malloc(sizeof(SLNode));q->data=x;q->next=p->next;p->next=q;return 1;
}
int ListDelete(SLNode *head,int i,DataType *x){SLNode *p,*s;int j;p=head;j=-1;while(p->next!=NULL&&p->next->next!=NULL&&j<i-1){p=p->next;j++;}if(j!=i-1){printf("刪除元素位置參數錯!");return 0;}s=p->next;*x=s->data;p->next=p->next->next;free(s);return 1;
}
int ListGet(SLNode *head,int i,DataType *x){SLNode *p;int j;p=head;j=-1;while(p->next!=NULL&&j<i){p=p->next;j++;}if(j!=i){printf("取出元素位置參數錯!");return 0;}*x=p->data;return 1;
}
void Destroy(SLNode **head){SLNode *p,*p1;p=*head;while(p!=NULL){p1=p;p=p->next;free(p1);}*head=NULL;
}

任務二:
設計循環單鏈表。要求:?
(1)循環單鏈表的操作,包括初始化,求元素個數,插入、刪除、取元素。?
(2) 設計一個測試主函數驗證所設計循環單鏈表的正確性。
[程序參數分析] 定義 Node 結構體來表示循環單鏈表的結點,頭結點的 next 指針指向鏈表的首結點,而最后一個結點的 next 指針指向頭結點,形成循環。程序提供了初始化、求元素個數、插入、刪除、取元素、打印、釋放鏈表空間等函數。在主函數中,我們演示了插入、刪除、獲取元素、打印鏈表長度和釋放鏈表的操作。
代碼如下:

#include<stdio.h>   
#include<malloc.h>
typedef int DataType;
#include"LinListO.h"
int main(void){SLNode *head,*p;int i,x;ListInitiate(&head);for(i=0;i<10;i++){ListInsert(head,i,i+1);}//ListDelete(head,4,&x);printf("鏈表中的元素:");for(i=0;i<ListLength(head);i++){ListGet(head,i,&x);printf("%d   ",x);}//printf("\n%d ",head->next->data);//printf("\n%d ",head->next->next->next->next->next->next->data);int j=-1;p=head;while(p->next!=head){p=p->next;j++;}ListGet(head,j,&x);printf("\n");printf("%d",x);Destroy(&head);
}
頭文件:
typedef struct Node{DataType data;struct Node *next;
}SLNode;
void ListInitiate(SLNode**head){*head=(SLNode *)malloc(sizeof(SLNode));(*head)->next=*head;
}
int ListLength(SLNode *head){SLNode *p=head;int size=0;while(p->next!=head){p=p->next;size++;}return size;
}
int ListInsert(SLNode *head,int i,DataType x){SLNode *p,*q;int j;p=head;j=-1;while(p->next!=head&&j<i-1){p=p->next;j++;}if(j!=i-1){printf("插入元素位置參數錯!");return 0;}q=(SLNode *)malloc(sizeof(SLNode));q->data=x;q->next=p->next;p->next=q;return 1;
}
int ListDelete(SLNode *head,int i,DataType *x){SLNode *p,*s;int j;p=head;j=-1;while(p->next!=head&&p->next->next!=head&&j<i-1){p=p->next;j++;}if(j!=i-1){printf("刪除元素位置參數錯!");return 0;}s=p->next;*x=s->data;p->next=p->next->next;free(s);return 1;
}
int ListGet(SLNode *head,int i,DataType *x){SLNode *p;int j;p=head;j=-1;while(p->next!=head&&j<i){p=p->next;j++;}if(j!=i){printf("取出元素位置參數錯!");return 0;}*x=p->data;return 1;
}
void Destroy(SLNode **head){SLNode *p,*p1;p=*head;while(p!=NULL){p1=p;p=p->next;free(p1);}*head=NULL;
}

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

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

相關文章

Java 三大特性—多態

目錄 1、多態的概念2、多態的條件3、向上轉型3.1 概念3.2 使用場景 4、向下轉型5、多態的優缺點 1、多態的概念 多態&#xff0c;通俗來講就是多種形態&#xff0c;即對于同樣的行為&#xff0c;不同的對象去完成會產生不同的狀態。比如動物都會吃東西&#xff0c;小狗和小貓都…

Ubuntu 24.04 LTS系統安裝RTX 4090顯卡驅動和cuda并部署ollama下載DeepSeek模型【自用詳細版】

自己搗鼓玩玩哈&#xff0c;正好有機子 1. 安裝驅動前的系統配置工作 卸載原有驅動并禁用nouveau sudo apt remove --purge nvidia*sudo cp /etc/modprobe.d/blacklist.conf /etc/modprobe.d/blacklist.conf.backup //備份文件sudo vim /etc/modprobe.d/blacklist.conf //修…

【一篇搞定配置】一篇帶你從配置到使用(PyCharm遠程)完成服務器運行項目(配置、使用一條龍)【全網最詳細版】

&#x1f308; 個人主頁&#xff1a;十二月的貓-CSDN博客 &#x1f525; 系列專欄&#xff1a; &#x1f3c0;各種軟件安裝與配置_十二月的貓的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻擋不了春天的腳步&#xff0c;十二點的黑夜遮蔽不住黎明的曙光 目錄 1.…

Mamba模型

為什么要提出mamba模型&#xff1f; transformer特點&#xff1a;訓練快&#xff0c;推理慢&#xff0c;計算成本O&#xff08;n*n&#xff09; Rnn的特點&#xff1a;訓練慢&#xff0c;推理快&#xff0c;容易遺忘 其實很容易理解&#xff0c;因為RNN的輸入只包含前一個隱…

如何在 Windows 11 上查找計算機的 IP 地址?

原文&#xff1a;如何在 Windows 11 上查找計算機的 IP 地址&#xff1f; | w3cschool筆記 在開始之前&#xff0c;我們先來了解一下什么是 IP 地址&#xff1a; 假設你住在一棟公寓樓里&#xff0c;快遞員需要把包裹送到你家。為了確保快遞能準確送到&#xff0c;你需要提供…

2.Spring-注解開發定義bean/純注解開發/Spring整合MyBatis(p21-p30)

&#xff08;一&#xff09;注解開發定義bean &#xff08;二&#xff09;純注解開發 &#xff08;三&#xff09;bean的作用范圍 &#xff08;三&#xff09;xml配置和注解配置 &#xff08;四&#xff09;Spring整合MyBatis 要在pom.xml定義一下坐標。org.spr…

解決:Fontconfig head is null, check your fonts or fonts configurat

文章目錄 問題解決方案安裝字體依賴包強制刷新字體緩存驗證是否生效 個人簡介 問題 在使用 Java 環境部署或運行圖形相關應用時&#xff0c;比如圖片驗證碼&#xff0c;偶爾會遇到如下報錯&#xff1a; Fontconfig head is null, check your fonts or fonts configurat意味當…

『不廢話』之Llama 4實測小報

2025年4月5日Llama 4一開源&#xff0c;隨后OpenRouter等平臺就提供免費調用。對于中文社區來&#xff0c;官方的測評結果其實意義不大&#xff08;原因先按下不表&#xff09;&#xff0c;就看知乎、微博、B站、twitter上的真實感受&#xff0c;最重要的是自己的真實案例測評。…

【NLP 56、實踐 ? LoRA完成NER任務】

目錄 一、數據文件 二、模型配置文件 config.py 三、數據加載文件 loader.py 1.導入文件和類的定義 2.初始化 3.數據加載方法 代碼運行流程 4.文本編碼 / 解碼方法    ① encode_sentence()&#xff1a; ② decode()&#xff1a; 代碼運行流程 ③ padding()&#xff1a; 代碼…

八大排序——c++版

本次排序都是按照升序排的 冒泡排序 void bubbleSort(vector<int>& nums) {int nnums.size();for(int i0;i<n-1;i){bool swappedfalse;for(int j0;j<n-1-i;j){if(nums[j]>nums[j1]){swap(nums[j],nums[j1]);swappedtrue;}}if(!swapped)break;} } //算法原…

mlir-tblgen 的應用漸進式示例

示例01 -gen-dialect-decls toy_dia.1.toy include "mlir/IR/OpBase.td" //include "mlir/IR/FunctionInterfaces.td" //include "mlir/IR/SymbolInterfaces.td" //include "mlir/Interfaces/SideEffectInterfaces.td"def Toy_Diale…

Go語言從零構建SQL數據庫(5)-Pratt解析算法:SQL表達式解析的核心引擎

Pratt解析算法&#xff1a;SQL表達式解析的核心引擎 1. 算法概述與工作原理 Pratt解析算法&#xff08;自頂向下運算符優先級解析&#xff09;是一種優雅的表達式解析方法&#xff0c;特別適合處理具有不同優先級運算符的復雜表達式。在我們的SQL解析器中&#xff0c;它負責解…

spring-ai-openai調用Xinference1.4.1報錯

1、Xinference 報錯logs 此處是調用 /v1/chat/completions 接口 2025-04-06 15:48:51 xinference | return await dependant.call(**values) 2025-04-06 15:48:51 xinference | File "/usr/local/lib/python3.10/dist-packages/xinference/api/restful_api.py", …

刻意練習:如何從新手到大師

1. 練習方式 練習主要有兩類&#xff1a;天真的練習和刻意練習。 所謂“天真的練習”&#xff0c;基本上只是反復地做某些事情&#xff0c;并指望只靠那種反復&#xff0c;就能提高表現和水平。一旦某個人的表現達到了“可接受”的水平&#xff0c;并且可以做到自動化&#x…

基于Java的人臉識別在線考試系統(jsp+springboot+mysql8.x)

基于Java的人臉識別在線考試系統(jspspringbootmysql8.x) 在線考試系統提供全面的考試管理和用戶管理功能。登錄界面支持管理員、教師和學生三種身份驗證&#xff0c;確保不同用戶訪問相應的功能模塊。系統自動組卷功能允許管理員根據不同科目和題型&#xff0c;如單選題、多選…

預測分析(二):基于機器學習的數值預測

文章目錄 基于機器學習的數值預測機器學習簡介監督學習的任務創建第一個機器學習模型機器學習的目標——泛化過擬合現象評價函數與最優化 建模前的數據處理進一步特征變換 多元線性回歸模型LASSO回歸kNN算法原理算法步驟k值的選擇 基于機器學習的數值預測 機器學習是人工智能的…

批量壓縮 jpg/png 等格式照片|批量調整圖片的寬高尺寸

圖片格式種類非常的多&#xff0c;并且不同的圖片由于像素、尺寸不一樣&#xff0c;可能占用的空間也會不一樣。文件太大會占用較多的磁盤空間&#xff0c;傳輸及上傳系統都非常不方便&#xff0c;可能會收到限制&#xff0c;因此我們經常會碰到需要對圖片進行壓縮的需求。如何…

生鮮果蔬便利店實體零售門店商城小程序

——線上線下融合賦能社區零售新生態 隨著新零售模式的深化和消費者需求的升級&#xff0c;生鮮果蔬便利店亟需通過數字化工具實現經營效率與用戶體驗的雙重提升。結合線下實體門店與線上商城的一體化小程序&#xff0c;成為行業轉型的核心工具。以下從功能模塊、運營策略及行…

如何開通google Free Tier長期免費云服務器(1C/1G)

Google宣布的一項政策&#xff0c;為標準層級的網絡提供每地域200G的免費流量。兩項政策結合&#xff0c;于是便可以得到一臺1核心、1G內存、30G磁盤、200G流量的小云服務器&#xff0c;可玩性大大提高。這篇文章就分享一下如何正確開機&#xff0c;避免產生額外的費用。 免費…

C# 多線程并發編程基礎

1. 線程基礎 1.1 線程簡介 C# 中的線程是操作系統能夠進行運算調度的最小單位&#xff0c;它被包含在進程中&#xff0c;是進程中的實際運作單位。一個進程可以包含多個線程&#xff0c;這些線程可以并發執行不同的任務。 1.2 線程的創建與啟動 在 C# 中&#xff0c;可以使…