亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C語言數(shù)據(jù)結(jié)構(gòu)順序表中的增刪改(尾插尾刪)教程示例詳解

 更新時間:2022年02月15日 10:01:59   作者:喬喬家的龍龍  
這篇文章主要為大家介紹了C語言數(shù)據(jù)結(jié)構(gòu)順序表中的增刪改教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步

初始化

在初步認(rèn)識順序表這一結(jié)構(gòu)后,我們就可以繼續(xù)深入探究
這是我之前在.h文件中創(chuàng)建的結(jié)構(gòu)體

typedef int type;
typedef struct list
{
	type* a;
	int size;
	int capacity;
}st;

在處理順序表結(jié)構(gòu)時我們會用到的一些接口,處理其中的關(guān)系,其實本質(zhì)上就是函數(shù),這里我用復(fù)雜英文對應(yīng)出來方便形成記憶。

void init(st *s);  //插入
void pushback( st* p, type x);//尾插
void popback(st* p); //尾刪
void pushfront( st* p, type x); //頭插
void popfront(st* p);   //頭刪
void insert(st* p, int n, type x);  //中間位置插入
void erase(st* p, int n);  //中間位置刪處

我用 init 函數(shù)實現(xiàn)簡單的初始化,首先會先把結(jié)構(gòu)體成員傳過來,注意再次強(qiáng)調(diào)區(qū)別形參和實參,傳值調(diào)用肯定會報錯滴,乖乖的換成指針,其實不論是不是傳址調(diào)用,我們都可以搞成指針傳過去,為了保險起見。
我們第一步肯定是開辟空間,先用 malloc 函數(shù)參上,當(dāng)然,null 還玩?zhèn)€屁屁,為了先避免掉這種情況,我們就 if 意思一下,然后給初始有效位設(shè)為 0,初始容量設(shè)為 5。

void init(st *s)
{
	s->a = (type*)malloc(sizeof(type) * 4);
	if (s->a == NULL)
	{
		printf("申請內(nèi)存失敗!\n");
		exit(-1);
	}
	s->size = 0;
	s-> capacity = 1;
}

尾插

然后就開始pushback 尾插操作:

void pushback(st* s, type x)
{
	assert(s);//空指針判斷
	s->a[s->size] = x;
	s->size++;
}

還是老規(guī)矩,assert 斷言是否為空指針,再放行。往下就簡單的,把x的值放入數(shù)組的size 位置上,讓 size ++即可。

但是 malloc 這種的指針是指向獨立不連續(xù)的空間,我們監(jiān)視窗口觀察也只能看到一個個不連續(xù)的值,所以還是要老老實實搞一個打印函數(shù),和數(shù)組一樣,直接遍歷一下我們++過的size即可:

void print(st* s)
{
	assert(s);
	int i = 0;
	for(i = 0; i < s->size; i++)
	{
		printf("%d ", s->a[i]);
	}
}

結(jié)果如下:

在這里插入圖片描述

格局打開

但是奇不奇怪,我 capacity 初始設(shè)定為 1,而我卻尾插了兩個數(shù)還沒有報錯,為什么捏?其實報錯了一定是你越界了,但沒有報錯不代表你就沒有越界,往往有些越界是檢查不出來的,因為還沒走到檢查的點上;就好比咱卷了不一定成功但不卷就一定不會成功。
所以我們的邏輯就要進(jìn)行更替:

	if (s->size >= s->capacity)
		s->capacity++; 

在assert 后加上 if 判斷句,讓容量隨有效位及時更新,但是又有一個問題,當(dāng)我數(shù)據(jù)量非常大時,我們使用一位開辟一位的方法讓 capacity++ 非常頻繁,但一下子開辟一大片空間有會浪費(fèi)資源,到后面已有數(shù)據(jù)越多開辟越大浪費(fèi)的越多怎么辦呢?我們比較普遍的做法就是開辟 2 倍:

	if (s->size == s->capacity)
	{
		s->capacity *= 2;
		s->a = (type*)realloc(s->a, sizeof(type) * s->capacity);
	}

這里敏感的朋友應(yīng)該張口就來realloc,realloc函數(shù)會對已有空間直接擴(kuò)容,但不一定是原地擴(kuò)容,后面有足夠的空間就會原地擴(kuò)容,但是不夠就會找一塊新的空間將數(shù)據(jù)拷貝過去再釋放掉原來空間。上面代碼將原來的空間給realloc,再增容到我要的空間,就能很好的滿足我們的要求。

尾刪

尾刪沒什么技術(shù)含量,和我們數(shù)組的思路一樣

void popback(st* s)
{
	assert(s);
	s->size--;
}

結(jié)果如下:

在這里插入圖片描述

以此類推,頭插頭刪是一個道理,不做贅述,更多關(guān)于C語言數(shù)據(jù)結(jié)構(gòu)順序表增刪改的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 關(guān)于C++靜態(tài)成員函數(shù)訪問非靜態(tài)成員變量的問題

    關(guān)于C++靜態(tài)成員函數(shù)訪問非靜態(tài)成員變量的問題

    靜態(tài)成員函數(shù)不能訪問非靜態(tài)成員,這是因為靜態(tài)函數(shù)屬于類而不是屬于整個對象,靜態(tài)函數(shù)中的 member可能都沒有分配內(nèi)存。靜態(tài)成員函數(shù)沒有隱含的this自變量。所以,它就無法訪問自己類的非靜態(tài)成員
    2013-10-10
  • Visual C++程序設(shè)計中Windows GDI貼圖閃爍的解決方法

    Visual C++程序設(shè)計中Windows GDI貼圖閃爍的解決方法

    這篇文章主要介紹了Visual C++程序設(shè)計中Windows GDI貼圖閃爍的解決方法,分析了GDI貼圖閃爍的常見原因及其具體解決方法,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-01-01
  • c++利用stl set_difference對車輛進(jìn)出區(qū)域進(jìn)行判定

    c++利用stl set_difference對車輛進(jìn)出區(qū)域進(jìn)行判定

    這篇文章主要介紹了set_difference,用于求兩個集合的差集,結(jié)果集合中包含所有屬于第一個集合但不屬于第二個集合的元素,需要的朋友可以參考下
    2017-03-03
  • DOS簡易版C語言貪吃蛇

    DOS簡易版C語言貪吃蛇

    這篇文章主要為大家詳細(xì)介紹了DOS簡易版C語言貪吃蛇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • C++ 中國象棋的實現(xiàn)流程詳解

    C++ 中國象棋的實現(xiàn)流程詳解

    中國象棋是起源于中國的一種棋,屬于二人對抗性游戲的一種,在中國有著悠久的歷史。由于用具簡單,趣味性強(qiáng),成為流行極為廣泛的棋藝活動
    2021-11-11
  • 一篇文章了解c++中的new和delete

    一篇文章了解c++中的new和delete

    C語言提供了malloc和free兩個系統(tǒng)函數(shù),完成對堆內(nèi)存的申請和釋放,而C++則提供了兩個關(guān)鍵字new和delete,下面這篇文章主要給大家介紹了如何通過一篇文章了解c++中new和delete的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • linux系統(tǒng)中c++寫日志文件功能分享

    linux系統(tǒng)中c++寫日志文件功能分享

    這篇文章主要介紹了linux系統(tǒng)中c++寫日志文件功能,簡化了glog,只保留了寫日志文件的功能,只是改寫了linux版本,需要的朋友可以參考下
    2014-03-03
  • C/C++中文件的隨機(jī)讀寫詳解及其作用介紹

    C/C++中文件的隨機(jī)讀寫詳解及其作用介紹

    這篇文章主要介紹了C/C++中文件的隨機(jī)讀寫詳解及其作用,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • C++拋出和接收異常的順序

    C++拋出和接收異常的順序

    這篇文章主要介紹了C++拋出和接收異常的順序,幫助大家更好的理解和學(xué)習(xí)C++,感興趣的朋友可以了解下
    2020-08-08
  • C語言實現(xiàn)鏈棧的步驟

    C語言實現(xiàn)鏈棧的步驟

    鏈棧是棧的鏈?zhǔn)酱鎯Y(jié)構(gòu),鏈??梢杂脝捂湵淼念^插法實現(xiàn),本文主要講述了如何用c語言去實現(xiàn)鏈棧,感興趣的朋友可以了解下
    2021-05-05

最新評論