順序表的應用

1.?順序表

1.1 寫法1

Linear_Opeartor2.c

#include "stdio.h"
#include "stdlib.h"
#include "stdbool.h"
#include "string.h"
//順序表//申明順序表的大小
#define MAXSIZE  5
typedef bool status;
//創建順序表
int *Linear_Create()
{int *p=(int *)malloc(sizeof(int)*MAXSIZE);if(p==NULL){printf("創建順序表失敗!\n");return NULL;}//將順序表進行清空memset(p,0,sizeof(int)*MAXSIZE);return p;
}
//判斷順序表是否已滿
int Linear_Is_Full(int *p)
{//如果順序表已滿,返回-1,如果順序表未滿,返回空的位置下標for(int i=0;i<MAXSIZE;i++){if(p[i]==0){return i;}}return -1;
}
//判斷順序表是否為空
status Linear_Is_Empty(int *p)
{if(p[0]==0){printf("順序表為空!\n");return true;}return false;
}//向順序表中插入數據,按照順序插入
status Linear_Insert(int *p,int data)
{//判斷順序表是否已滿if(Linear_Is_Full(p)<0){printf("順序表已滿,插入失敗!\n");return false;}int pos=Linear_Is_Full(p);p[pos]=data;return true;
}
//遍歷順序表
status Linear_Travel(int *p)
{if(p==NULL){printf("順序表不存在,遍歷失敗!\n");return false;}for(int i=0;i<MAXSIZE;i++){printf("p[%d]=%d\n",i,*(p+i));}return true;
}
//刪除順序表中的數據
status Linear_Delete(int *arr,int *data)
{if(Linear_Is_Empty(arr)){printf("順序表為空,刪除失敗!\n");return false;}if(Linear_Is_Full(arr)<0){arr[MAXSIZE-1]=0;return true;}int pos=Linear_Is_Full(arr);*data=arr[pos-1];arr[pos-1]=0;return true;
}
//在順序表的指定位置插入數據
status Linear_Insert_Fixed_Data(int *p,int pos,int data)
{//判斷順序表是否已滿if(Linear_Is_Full(p)<0){printf("順序表已滿,插入失敗!\n");return false;}//判斷位置是否越界if(pos<0||pos>MAXSIZE-1){printf("插入位置越界,插入失敗!\n");return false;}int pos1=Linear_Is_Full(p);if(pos1==pos){p[pos]=data;return true;}if(pos1<pos){printf("插入的位置前還有空位置,插入失敗!\n");return false;}if(pos1>pos){for(int i=MAXSIZE-1;i>pos;i--){p[i]=p[i-1];}p[pos]=data;return true;}}
//刪除順序表的指定位置的數據
status Linear_Delete_Fixed_Data(int *p,int pos,int *data)
{if(Linear_Is_Empty(p)){printf("順序表為空,刪除失敗!\n");return false;}if(pos<0||pos>MAXSIZE-1){printf("傳入的位置,超出了順序表的大小,刪除失敗!\n");return false;}if(p[pos]==0){printf("傳入的位置對應的數據元素為空,刪除失敗!\n");return false;}else{*data=p[pos];for(int i=pos;i<MAXSIZE-1;i++){p[i]=p[i+1];}p[MAXSIZE-1]=0;return true;}}
int main()
{int *arr=Linear_Create();//向順序表中插入數據Linear_Insert(arr,10);Linear_Insert(arr,20);Linear_Insert(arr,30);Linear_Insert(arr,40);//遍歷順序表Linear_Travel(arr);printf("####################\n");Linear_Insert_Fixed_Data(arr,1,50);Linear_Travel(arr);printf("####################\n");// Linear_Insert_Fixed_Data(arr,3,60);Linear_Travel(arr);return 0;
}

1.2?寫法2

Linear_Opeartor.c

#include "stdio.h"
#include "stdlib.h"
#include "stdbool.h"
#include "string.h"
//順序表//申明順序表的大小
#define MAXSIZE  5
typedef bool status;
//創建順序表
int *Linear_Create()
{int *p=(int *)malloc(sizeof(int)*MAXSIZE);if(p==NULL){printf("創建順序表失敗!\n");return NULL;}//將順序表進行清空memset(p,0,sizeof(int)*MAXSIZE);return p;
}
//判斷順序表是否已滿
int Linear_Is_Full(int *p)
{//如果順序表已滿,返回-1,如果順序表未滿,返回空的位置下標for(int i=0;i<MAXSIZE;i++){if(p[i]==0){return i;}}return -1;
}
//判斷順序表是否為空
status Linear_Is_Empty(int *p)
{if(p[0]==0){printf("順序表為空!\n");return true;}return false;
}//向順序表中插入數據,按照順序插入
status Linear_Insert(int *p,int data)
{//判斷順序表是否已滿if(Linear_Is_Full(p)<0){printf("順序表已滿,插入失敗!\n");return false;}int pos=Linear_Is_Full(p);p[pos]=data;return true;
}
//遍歷順序表
status Linear_Travel(int *p)
{if(p==NULL){printf("順序表不存在,遍歷失敗!\n");return false;}for(int i=0;i<MAXSIZE;i++){printf("p[%d]=%d\n",i,*(p+i));}return true;
}
//刪除順序表中的數據
status Linear_Delete(int *arr,int *data)
{if(Linear_Is_Empty(arr)){printf("順序表為空,刪除失敗!\n");return false;}if(Linear_Is_Full(arr)<0){arr[MAXSIZE-1]=0;return true;}int pos=Linear_Is_Full(arr);*data=arr[pos-1];arr[pos-1]=0;return true;
}//在任意位置插入數據
//1 2 3 4 5
status Linear_Insert_renyi(int *arr,int pos,int date){if(Linear_Is_Full(arr)<0){printf("順序表已經滿了,插入數據失敗\n");return false;}int end = MAXSIZE-1;while(end>pos){arr[end] = arr[end-1];end--;}arr[pos] = date;}//在任意位置刪除
//1 2 3 4 5
status Linear_delete_renyi(int *arr,int pos){if(Linear_Is_Empty(arr)){printf("順序表為空,不能刪除數據\n");return false;}int begin = pos;while(begin<MAXSIZE-1){arr[begin] = arr[begin+1];begin++;}arr[MAXSIZE-1] = 0;}int main()
{int *arr=Linear_Create();//向順序表中插入數據Linear_Insert(arr,10);Linear_Insert(arr,20);Linear_Insert(arr,30);//遍歷順序表Linear_Travel(arr);printf("####################\n");int data;Linear_Delete(arr,&data);printf("刪除的數據為:%d\n",data);Linear_Travel(arr);printf("####################\n");Linear_Insert(arr,30);Linear_Insert_renyi(arr,0,50);Linear_Insert_renyi(arr,4,70);Linear_Travel(arr);printf("####################\n");Linear_delete_renyi(arr,3);Linear_Travel(arr);return 0;
}

2.?合并兩個有序的順序表

hebingbiao.c

/*************************************************************************> File Name: hebingbiao.c> Author: lsf> Mail: lsf_2012@163.com > Created Time: 2023年10月12日 星期四 16時26分00秒************************************************************************/#include<stdio.h>//合并兩個有序的順序表void hebingshunxvbiao(int *arr3,int *arr1,int *arr2,int sz1,int sz2){int str3 = 0;int str1 = 0;int str2 = 0;while(str1<sz1 && str2<sz2){if(arr1[str1]<arr2[str2]){arr3[str3] = arr1[str1];str1++;}else{arr3[str3] = arr2[str2];str2++;}str3++;}while(str1<sz1){arr3[str3++] = arr1[str1++];}while(str2<sz2){arr3[str3++] = arr2[str2++];}}int main()
{int arr1[] = {1,5,7,9,11};int arr2[] = {1,2,4};int arr3[40];int sz1 = sizeof(arr1)/sizeof(arr1[0]);int sz2 = sizeof(arr2)/sizeof(arr2[0]);hebingshunxvbiao(arr3,arr1,arr2,sz1,sz2);int sz3 = sz1+sz2;for(int i=0;i<sz3;i++){printf("%d ",arr3[i]);}}

3.?使用鏈表完成一個簡單的學生管理系統

student.c

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//鏈表
struct Node{char name[20];int age;struct Node* next;
};struct Node* L = NULL;//定義一個全局變量的頭指針//新增學生
void stu_insert(){struct Node* newstu = (struct Node*)malloc(sizeof(struct Node));//錄入信息printf("請輸入名字:");scanf("%s",newstu->name);printf("請輸入年齡:");scanf("%d",&(newstu->age));newstu->next = NULL;if(L==NULL){//如果頭結點指向空,就證明該鏈表還買有數據L = newstu;//頭指針指向新的學生數據}else{//反之鏈表中已經有了數據//遍歷鏈表找到最后一個數據,將新數據追加上去struct Node* p = L;while (p->next!=NULL){p = p->next;}//到這里已經找到了最后一個數據,將新數據追加在后面p->next = newstu;}}//遍歷鏈表
void bianli(){struct Node* p = L;//將頭指針賦值給一個新的變量,防止頭結點丟失if(p==NULL){printf("沒有學生信息\n");return;}while(p!=NULL){printf("姓名:%s      年齡:%d\n",p->name,p->age);p = p->next;//指向下一個節點}
}//查詢學生信息
struct Node * select(){char name[20];printf("請輸入學生的姓名:");scanf("%s",name);struct Node* p = L;//將頭指針賦值給一個新的變量,防止頭結點丟失while(p!=NULL){if(strcmp(name,p->name)==0){printf("該生信息如下\n");printf("姓名:%s     年齡:%d\n",p->name,p->age);return p;}p = p->next;//指向下一個節點}printf("沒有該學生\n");return NULL;
}//更改學生信息
void update(){struct Node* p = select();//先查學生if(p!=NULL){//學生存在printf("請重新錄入該生信息\n");//錄入信息printf("請輸入名字:");scanf("%s",p->name);printf("請輸入年齡:");scanf("%d",&(p->age));printf("學生信息更改成功\n");}else{printf("你要更改的學生不存在\n");}}//刪除學生信息
void delete(){char name[20];printf("請輸入要刪除的學生得姓名:");scanf("%s",name);//雙指針struct Node *pre = NULL;struct Node *cur = L;while(cur!=NULL){//遍歷鏈表if(strcmp(name,cur->name)==0){//找到了刪的人if(pre==NULL){//頭結點是要刪的人L = cur->next;}else{pre->next = cur->next;}printf("該生已被刪除\n");free(cur);cur=NULL;return;}pre = cur;cur = cur->next;}printf("該生不存在\n");}void menu(){printf("****************************\n");printf("***1.add       2.select*****\n");printf("***3.show      4.upadte*****\n");printf("***5.delete    0.exit  *****\n");printf("****************************\n");
}int main()
{int input;do{menu();printf("請選擇:");scanf("%d",&input);switch (input){case 1:stu_insert();//新增break;case 2:select();//查詢break;case 3:bianli();//遍歷break;case 4:update();//更改break;case 5:delete();//刪除break;case 0:bianli();//遍歷break;default:printf("選擇錯誤\n");break;}}while(input);return 0;
}

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

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

相關文章

DockerFile中途執行出錯的解決辦法

DockerFile中途執行出錯的解決辦法 你們是否也曾經因為DockerFile中途執行出錯,而對其束手無策?總是對docker避之不及! 但是當下載的源碼運用到了docker,dockerFile 執行到一半,報錯了怎么辦? 現狀 那么當DockerFile執行一半出錯后,會產生什么結果呢? 如圖可知,生成…

我們常說的流應用到底是什么?

流應用是DCloud公司開發的一種可以讓手機App安裝包實現邊用邊下的技術。基于HTML5規范的即點即用應用&#xff0c;開發者按照HTML5規范開發的應用&#xff0c;可以在支持HTML5流應用的發行渠道實現即點即用的效果。 流應用是基于 HTML5規范的即點即用應用&#xff0c;開發者按照…

Nacos注冊中心客戶端容災

目前Nacos客戶端有一個FailoverReactor來進行容災文件的管理&#xff0c;可以通過在指定磁盤文件里寫入容災數據來進行客戶端使用數據的覆蓋。FailoverReactor目前會攔截Nacos客戶端查詢接口調用&#xff0c;以getAllInstances接口為例&#xff0c;目前FailoverReactor的工作流…

【合集】SpringBoot——Spring,SpringBoot,SpringCloud相關的博客文章合集

前言 本篇博客是spring相關的博客文章合集&#xff0c;內容涵蓋Spring&#xff0c;SpringBoot&#xff0c;SpringCloud相關的知識&#xff0c;包括了基礎的內容&#xff0c;比如核心容器&#xff0c;springMVC&#xff0c;Data Access&#xff1b;也包括Spring進階的相關知識&…

免費的網頁數據抓取工具有哪些?【2024附下載鏈接】

在網絡上&#xff0c;有許多網頁數據抓取工具可供選擇。本文將探討其如何全網采集數據并支持指定網站抓取。我們將比較不同的數據采集工具&#xff0c;幫助您找到最適合您需求的工具。 網頁數據抓取工具種類 在選擇網頁數據抓取工具之前&#xff0c;讓我們先了解一下這些工具…

TC397 EB MCAL開發從0開始系列 之 [21.2] FlsLoader配置實戰 - 擦除讀寫Pflash

一、FlsLoader配置1、配置目標2、目標依賴2.1 硬件使用2.2 軟件使用2.3 新增模塊3、EB配置3.1 配置講解3.2 模塊配置3.2.1 MCU配置3.2.2 PORT配置3.2.3 FlsLoader配置3.2.5 Irq配置3.2.6 ResourceM配置4、ADS代碼編寫及調試<

[ 藍橋杯Web真題 ]-布局切換

目錄 介紹 準備 目標 規定 思路 解法參考 介紹 經常用手機購物的同學或許見過這種功能&#xff0c;在瀏覽商品列表的時候&#xff0c;我們通過點擊一個小小的按鈕圖標&#xff0c;就能快速將數據列表在大圖&#xff08;通常是兩列&#xff09;和列表兩種布局間來回切換。…

電機:有刷直流電機的原理

一、什么是有刷直流電機 直流有刷電機&#xff08;Brushed DC Motor&#xff09;&#xff0c;定子是用永磁鐵或者線圈做成&#xff0c;以形成固定磁場。在定子一端上有固定碳刷&#xff0c;或者銅刷&#xff0c;負責把外部電流引入轉子線圈。而轉子是由線圈構成&#xff0c;線…

郵件營銷軟件:10個創新郵件營銷策略,提升投資回報率(一)

電子商務和電子郵件營銷密不可分。盡管電子商務在蓬勃發展&#xff0c;而很多人對郵件營銷頗有微詞。但是在電子商務中&#xff0c;郵件營銷的確是一種有效營銷方式。在本文中&#xff0c;我們將討論一下郵件營銷在電子商務中的有效運用&#xff0c;幫助您的企業在今年盡可能地…

2023-12-05 Qt學習總結6

點擊 <C 語言編程核心突破> 快速C語言入門 Qt學習總結 前言十八 QMessageBox消息對話框十九 Qt布局管理總結 前言 要解決問題: 學習qt最核心知識, 多一個都不學. 十八 QMessageBox消息對話框 QMessageBox消息對話框是Qt中的一個提供用戶交互界面的對話框窗口。 它通常…

MyBatis 四大核心組件之 ParameterHandler 源碼解析

&#x1f680; 作者主頁&#xff1a; 有來技術 &#x1f525; 開源項目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 倉庫主頁&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 歡迎點贊…

【圖片版】計算機組成原理考前復習題【第2章 運算方法和運算器-1】

目錄 前言 考前復習題&#xff08;必記&#xff09; 結尾 前言 在計算機組成原理的學習過程中&#xff0c;我們深入探索了計算機系統概述這一重要領域。計算機系統作為現代科技的核心&#xff0c;是整個計算機科學的基石。我們將學到的知識與理論轉化為了能夠解決現實問題的…

Python+unittest+requests接口自動化測試框架搭建 完整的框架搭建過程

首先配置好開發環境&#xff0c;下載安裝Python并下載安裝pycharm&#xff0c;在pycharm中創建項目功能目錄。如果不會的可以百度Google一下&#xff0c;該內容網上的講解還是比較多比較全的&#xff01; 大家可以先簡單了解下該項目的目錄結構介紹&#xff0c;后面會針對每個文…

docker 可視化工具操作說明 portainer

官網地址 https://docs.portainer.io/start/install-ce/server/docker/linux 1.First, create the volume that Port docker volume create portainer_data2.下載并安裝容器 docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restartalways -v /var/run/docker…

PWN動態調試

這篇文章就是來教大家學習怎么動態調試的&#xff0c;然后我還寫了一篇關于動態調試的文章&#xff0c;不是buu上面的題&#xff0c;就是兩道簡單的棧溢出問題&#xff0c;那兩道題挺有特點的。大家可以去看看。 每日3道PWN之課外2道&#xff08;第2.5天&#xff09;-CSDN博客 …

C#暫停和恢復(Thread.Suspend()和Thread.Resume() vs AutoResetEvent()和EventWaitHandle())

目錄 一、Thread.Suspend()和Thread.Resume() 二、AutoResetEvent()和EventWaitHandle() 1.AutoResetEvent() 2.EventWaitHandle() 3.示例及生成效果 一、Thread.Suspend()和Thread.Resume() 自 .NET 2.0 以后&#xff08;含&#xff09;&#xff0c;Thread.Suspend() 和…

性能監控體系:InfluxDB Grafana Prometheus

InfluxDB 簡介 什么是 InfluxDB &#xff1f; InfluxDB 是一個由 InfluxData 開發的&#xff0c;開源的時序型數據庫。它由 Go 語言寫成&#xff0c;著力于高性能地查詢與存儲時序型數據。 InfluxDB 被廣泛應用于存儲系統的監控數據、IoT 行業的實時數據等場景。 可配合 Te…

SSD基礎架構與NAND IO并發問題探討

在我們的日常生活中&#xff0c;我們經常會遇到一些“快如閃電”的事物&#xff1a;比如那場突如其來的雨、那個突然出現在你眼前的前任、還有就是今天我們要聊的——固態硬盤&#xff08;SSD&#xff09;。 如果你是一個技術宅&#xff0c;或者對速度有著近乎偏執的追求&…

電阻知識總結與詳細選型指南

目錄 1. 基礎知識 1.1 電阻的定義和符號 1.2 電阻的公式 1.3 電阻的串聯與并聯 2. 參數選型 2.1 電阻值 2.2 功率 2.3 精度 2.4 溫度系數 2.5 電壓系數 2.6 包裝類型 2.7 耐壓 2.8 特殊應用需求 2.9 環保要求 3. 產品應用 3.1 電流限制和保護 3.2 電壓分壓和電…

【Qt開發流程】之容器類1:介紹及常用容器類和使用Java風格迭代器進行遍歷

概述 Qt庫提供了一組通用的基于模板的容器類。這些類可用于存儲指定類型的項。例如&#xff0c;如果需要一個可調整大小的QString數組&#xff0c;可以使用QVector<QString>。 這些容器類被設計成比STL容器更輕、更安全、更易于使用。如果不熟悉STL&#xff0c;或者更喜…