数据结构与算法(8-1)顺序表查找及优化
生活随笔
收集整理的這篇文章主要介紹了
数据结构与算法(8-1)顺序表查找及优化
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
?
一、順序表查找
二、順序表查找優化(重點)
總代碼
一、順序表查找
從頭到尾或從尾到頭查找。
//順序表查找(需要判斷兩次)
int ListSearch(char ch)
{for (int i = 0; i < strlen(str); i++) //一次判斷{if (str[i] == ch) //二次判斷return i;}return -1;
}
順序查找雖然簡單,但是缺點也比較明顯,就是效率比較低,兩次判斷,接下來對齊進行優化,讓它變成一次判斷:
二、順序表查找優化(重點)
關鍵思想就是:設置哨兵。
把首或尾元素作為哨兵,判斷到它了可以直接退出,不用外面的for循環一次次判斷。
//順序表查找優化(數據量大的時候有奇效)(只需要判斷一次,比先前效率快一倍)
int ListSearch_Optimize(char ch)
{int i = -1;str[strlen(str)] = ch; //設置哨兵while (str[++i] != ch); //不為哨兵,則繼續循環(只需要判斷一次,比先前效率快一倍)return i;
}
總代碼
//順序表查找及優化
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string>char str[20];//輸入
char Input()
{char ch = ' ';printf("請輸入一串數組:\n");for (int i = 0; i < 20 && ch != '\n'; i++){scanf("%c", &ch);str[i] = ch;}printf("請輸入您想要查找的字符:");scanf("%c", &ch);return ch;
}//順序表查找(需要判斷兩次,效率較低)
int ListSearch(char ch)
{for (int i = 0; i < strlen(str); i++) //一次判斷{if (str[i] == ch) //二次判斷return i;}return -1;
}//順序表查找優化(數據量大的時候有奇效)(只需要判斷一次,比先前效率快一倍)
int ListSearch_Optimize(char ch)
{int i = -1;str[strlen(str)] = ch; //設置哨兵while (str[++i] != ch); //不為哨兵,則繼續循環(只需要判斷一次,比先前效率快一倍)return i;
}int main()
{char ch;ch = Input(); //輸入printf("順序表查找結果: %d\n", ListSearch(ch)); //順序表查找printf("順序表優化查找結果:%d\n", ListSearch_Optimize(ch)); //順序表查找優化return 0;
}
參考資料
https://blog.csdn.net/qq_44725331/article/details/115411296?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162876655416780262576379%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162876655416780262576379&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-2-115411296.first_rank_v2_pc_rank_v29&utm_term=%E6%8A%98%E5%8D%8A%E6%9F%A5%E6%89%BE&spm=1018.2226.3001.4187
總結
以上是生活随笔為你收集整理的数据结构与算法(8-1)顺序表查找及优化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenCV(八)形态学操作3--形态学
- 下一篇: OpenCV(总结篇)图像逐像素访问(三