日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

再写顺序表(c语言实现,外加冒泡排序,二分查找)

發布時間:2023/11/30 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 再写顺序表(c语言实现,外加冒泡排序,二分查找) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概念

順序表是用一段物理地址連續的存儲單元依次存儲數據元素的線性結構,一般情況下采用數組存儲。在數組 上完成數據的增刪查改。

  • 順序表一般可以分為:
  • 靜態順序表:使用定長數組存儲。
  • 動態順序表:使用動態開辟的數組存儲。
  • 頭文件聲明

    SeqList.h

    #pragma once #include<stdbool.h>typedef int SDataType; /* //靜態順序表 typedef struct SeqList{SDataType array[100]; //能存100個數的靜態順序表int size; //表是當前順序表中有多少個數,順便也表示了即將插入的下標} SeqList; *///動態順序表 typedef struct SeqList{SDataType *array; //指上堆上的空間int size; //表是當前順序表中有多少個數,順便也表示了即將插入的下標int capacity; //容量 } SeqList;//初始化/銷毀 //seqlist 是一個變量的地址 //capacity 表示順序表的容量 void SeqListInit(SeqList * seqlist,int capacity); void SeqListDestroy(SeqList * seqlist);//增刪改查//插入 (前,中,后) //尾插 void SeqListPushBack(SeqList *seqlist, SDataType value); //頭插 void SeqListPushFront(SeqList * seqlist, SDataType value); //中間插入 void SeqListInsert(SeqList *seqlsit, int pos, SDataType value);//刪除 //尾刪 void SeqListPopBack(SeqList *seqlist); //頭刪 void SeqListPopFront(SeqList *seqlist); //刪除pos所在的下標的數據 void SeqListErase(SeqList *seqlist, int pos);//打印 void SeqListPrint(const SeqList *seqlist); //修改pos所在下標的數據為value void SeqListModify(SeqList *seqlist, int pos, SDataType value); //查找 int SeqListFind(const SeqList *seqlist, SDataType value); //找到并刪除遇到的第一個value void SeqListRemove(SeqList *seqlist, SDataType value); //判斷順序表是否為空 bool SeqListEmpty(const SeqList *seqlist); //返回數據個數 int SeqListSize(const SeqList *seqlist);//冒泡排序 void SeqListBubbleSort(SeqList *seqlist); //二分查找 int SeqListSort(const SeqList *seqlist, SDataType value); //刪除遇到的所有value void SeqListRemoveAll(SeqList *seqlist, SDataType value);
    順序表主要功能實現

    SeqList.c

    #include"SeqList.h" #include<assert.h> #include<malloc.h> #include<stdio.h> #include<stdlib.h>//檢查是否需要擴容,如果需要擴容就進行擴容 //保證函數結束后,容量一定夠用 static void CheckCapacity(SeqList *seqlist) {assert(seqlist != NULL);assert(seqlist->array != NULL);assert(seqlist->size <= seqlist->capacity);if (seqlist->size < seqlist->capacity){return;}//空間擴大兩倍int capacity = 2 * seqlist->capacity;//申請新空間SDataType *array = (SDataType *)malloc(sizeof(SDataType)*capacity);assert(array);//搬移for (int i = 0; i < seqlist->size; i++){array[i] = seqlist->array[i];}//釋放原空間free(seqlist->array);seqlist->array = array; }void SeqListInit(SeqList * seqlist, int capacity) {assert(seqlist != NULL);seqlist->array = (SDataType*)malloc(sizeof(SDataType)* capacity);assert(seqlist->array);seqlist->size = 0;seqlist->capacity = capacity; }void SeqListDestroy(SeqList * seqlist) {assert(seqlist != NULL);assert(seqlist->array != NULL);free(seqlist->array);seqlist->array = NULL;seqlist->size = 0;seqlist->capacity = 0; } //尾插 void SeqListPushBack(SeqList *seqlist, SDataType value) {assert(seqlist != NULL);assert(seqlist->array !=NULL);CheckCapacity(seqlist);seqlist->array[seqlist->size] = value;seqlist->size++; } //尾刪 void SeqListPopBack(SeqList *seqlist) {assert(seqlist != NULL);assert(seqlist->array != NULL);assert(seqlist->size > 0); //數據元素個數大于0seqlist->size--; } //頭插 /*1. 從后往前搬,避免覆蓋2. 寫循環先確定循環的邊界i 空間下表 [size,0)i 數據下標 [size -1,0]3. 搬移空間下標:array[i] = array[i-1];數據下標:array[i+1] = array[i]; */ void SeqListPushFront(SeqList * seqlist, SDataType value) {assert(seqlist != NULL);assert(seqlist->array != NULL);CheckCapacity(seqlist);//做數據的搬移,i代表空間下標for (int i = seqlist->size; i > 0; i--){seqlist->array[i] = seqlist->array[i - 1];}seqlist->array[0] = value;seqlist->size++; } //前刪 void SeqListPopFront(SeqList *seqlist){assert(seqlist != NULL);assert(seqlist->array != NULL);assert(seqlist->size > 0);#if 0for (int i = 0; i < seqlist->size; i++){seqlist->array[i] = seqlist->array[i + 1];} #endiffor (int i = 1; i < seqlist->size; i++){seqlist->array[i - 1] = seqlist->array[i];}seqlist->size--; }//中間插 void SeqListInsert(SeqList *seqlist, int pos, SDataType value){assert(seqlist != NULL);assert(seqlist->array != NULL);assert(pos >= 0 && pos <= seqlist->size);CheckCapacity(seqlist);for (int i = seqlist->size - 1; i >= pos; i--){seqlist->array[i + 1] = seqlist->array[i];}seqlist->array[pos] = value; }//中間刪 void SeqListErase(SeqList *seqlist, int pos){assert(seqlist!= NULL);assert(seqlist->array != NULL);assert(seqlist->size > 0);assert(pos >= 0 && pos < seqlist->size); #if 0//i代表數據for (int i = pos; i < seqlist->size - 1; i++){seqlist->array[i] = seqlist->array[i + 1];} #endif//i代表數據for (int i = pos + 1; i < seqlist->size ; i++){seqlist->array[i - 1] = seqlist->array[i];}seqlist->size--; }//打印 void SeqListPrint(const SeqList *seqlist){for (int i = 0; i < seqlist->size; i++)printf("%d", seqlist->array[i]);printf("\n"); } //修改pos所在下標的數據為value void SeqListModify(SeqList *seqlist, int pos, SDataType value){assert(pos >= 0 && pos < seqlist->size);seqlist->array[pos] = value; } //查找 //找到返回下標 //沒找到返回-1 int SeqListFind(const SeqList *seqlist, SDataType value){for (int i = 0; i < seqlist->size; i++){if (seqlist->array[i] == value){return i;}}return -1; } //找到并刪除遇到的第一個value void SeqListRemove(SeqList *seqlist, SDataType value){int pos = SeqListFind(seqlist, value);if (pos != -1){SeqListErase(seqlist, pos);} } //判斷順序表是否為空 bool SeqListEmpty(const SeqList *seqlist){return seqlist->size == 0; } //返回數據個數 int SeqListSize(const SeqList *seqlist){return seqlist->size; }void Swap(int *a, int *b) {int t = *a;*a = *b;*b = t; }//冒泡排序 void BubbleSort(int array[], int size) {int isSorted; //如果數組本身有序,就可以優化for (int i = 0; i < size - 1; i++){isSorted = 1; //1代表有序//一次冒泡過程//一次冒泡過程中,如果沒有交換就說明本身有序for (int j = 0; j < size - 1 - i; j++){if (array[j]>array[j + 1]){Swap(array + j, array + j + 1);//Swap(&array[i])isSorted = 0;}}//一次冒泡結束if (isSorted == 1){break;}} }//冒泡排序 void SeqListBubbleSort(SeqList *seqlist){BubbleSort(seqlist->array, seqlist->size); }//二分查找 int SeqListSort(const SeqList *seqlist, SDataType value) {int left = 0;int right = seqlist->size;while (left < right){int mid = (right - left) / 2 + left;if (value == seqlist->array[mid]){return mid;}else if (value < seqlist->array[mid]){right = mid;}else{left = mid + 1;}}return -1; }void SeqListRemoveAll(SeqList *seqlist, SDataType value){ #if 0 //O(N*2) O(1)int pos;while ((pos = SeqListFind(seqlist, value)) != -1){SeqListErase(seqlist, pos);} #endif#if 0 //O(N) O(N)//開辟新數組SDataType *array = (SDataType *)malloc(sizeof(SDataType)* seqlist->size);assert(array);//搬出去int index = 0;for (int i = 0; i < seqlist->size; i++){if (seqlist->array[i] != value){array[index] = seqlist->array[i];index++;}}//搬回去for (int j = 0; j < index; j++){seqlist->array[j] = array[j];}seqlist->size = index; #endifint index = 0;for (int i = 0; i < seqlist->size; i++){if (seqlist->array[i] != value){seqlist->array[index] = seqlist->array[i];index++;}}seqlist->size = index; }
    測試用例

    Main.c

    #include"SeqList.h"void TestSeqList1() {SeqList seqlist;SeqListInit(&seqlist, 100);SeqListPushBack(&seqlist, 1);SeqListPushBack(&seqlist, 2);SeqListPushBack(&seqlist, 3);//1,2,3SeqListPushFront(&seqlist, 11);SeqListPushFront(&seqlist, 12);SeqListPushFront(&seqlist, 13);//13,12,11,1,100,2,3SeqListInsert(&seqlist, 4, 100);//13,12,11,1,100,2,3SeqListPopBack(&seqlist);//13,12,11,1,100,2SeqListPopFront(&seqlist);//12,11,1,100,2SeqListErase(&seqlist, 3);//12,11,100,2SeqListDestroy(&seqlist); }void TestSeqList2() {SeqList seqlist;SeqListInit(&seqlist, 10);SeqListPushBack(&seqlist, 3);SeqListPushBack(&seqlist, 5);SeqListPushBack(&seqlist, 2);SeqListPushBack(&seqlist, 7);SeqListPushBack(&seqlist, 9);SeqListPushBack(&seqlist, 4);SeqListPushBack(&seqlist, 8);SeqListPushBack(&seqlist, 6);SeqListPushBack(&seqlist, 1);SeqListPushBack(&seqlist, 0);SeqListBubbleSort(&seqlist);int r = SeqListSort(&seqlist, 3);printf("%d\n", r);SeqListPrint(&seqlist); }int main() {TestSeqList2();system("pause");return 0; }

    總結

    以上是生活随笔為你收集整理的再写顺序表(c语言实现,外加冒泡排序,二分查找)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 亚洲国产成人在线视频 | 国产免费黄色av | 久热最新 | 超碰777| 被黑人猛躁10次高潮视频 | 特黄av| 91碰碰| 亚洲鲁鲁| 成人黄色三级视频 | 91禁外国网站 | 国产情侣激情 | 亚洲欧美日本一区二区 | 伊人98| 污网在线看 | 精品偷拍一区 | 韩国精品一区二区三区 | 亚洲国产日韩在线 | 国产一区二区三区在线观看免费 | 国产在线播放一区二区三区 | 欧美另类videos | 久久久久亚洲av片无码 | 六月丁香综合网 | 成人一区视频 | 激情小说一区 | 婷婷五综合 | 天天插天天射 | 99视频在线精品免费观看2 | 日日干,夜夜操 | 亚洲天堂偷拍 | 人人妻人人藻人人爽欧美一区 | 免费成人黄色片 | 一区二区三区不卡视频 | 久久久亚洲天堂 | 国产手机在线播放 | 成人一级黄色片 | 日韩欧美二区 | 特级西西444www高清大胆 | 女人17片毛片60分钟 | 成人av在线影院 | 姝姝窝人体www聚色窝 | 久久久久久一 | 91在线观看免费高清完整版在线观看 | 久久高清无码电影 | 伊人99re| 久热99| 欧美乱论| 国产精品女同一区二区 | 无码成人精品区一级毛片 | 亚洲性图一区二区三区 | 日韩精品tv | www.色香蕉 | 欧美 日韩 成人 | 色欲亚洲Av无码精品天堂 | 国产精品视频一区二区在线观看 | av成人在线播放 | 国产人人爱 | 免费的理伦片在线播放 | 国产视频久久 | 国产精品美女网站 | 色片网站在线观看 | 亚洲综合五月天婷婷丁香 | 伊人网视频 | 亚洲欧美一区二区在线观看 | 中文字幕天堂网 | 97人人澡人人爽人人模亚洲 | 日韩亚洲精品中文字幕 | 国产日产欧美 | 成人动漫一区二区三区 | 怡红院成人在线 | 亚洲第一综合网 | 国产亚洲一区在线 | 久久久久人妻精品色欧美 | 日韩久久影院 | 成年视频在线观看 | 欧美黑人狂野猛交老妇 | 中文字幕亚洲成人 | 中文字幕人妻互换av久久 | 色男人网 | 激情小说中文字幕 | 三级国产三级在线 | 亚洲一区二区三区久久久成人动漫 | 波多野结衣中文字幕一区二区 | 一级成人黄色片 | 欧美操操操 | 青青操视频在线 | 日本久久影视 | 国产婷婷在线观看 | 黄色永久视频 | 91视频高清 | 亚洲国产精品久久久久爰色欲 | 污网站在线观看免费 | av小次郎收藏 | www国产91| 成人精品一区二区三区中文字幕 | 亚洲一区二区三区成人 | 毛片3| 日韩av资源在线观看 | 香蕉大久久 | 在线播放www |