最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言實現(xiàn)順序表的插入刪除

 更新時間:2022年05月13日 08:39:50   作者:菜雞蘿卜  
這篇文章主要介紹了C語言實現(xiàn)順序表的插入刪除,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

首先聲明一個順序表的結構 (數(shù)組的第一個元素是0,但是順序表的第一個一般 從1(人為設定)開始)

#include <stdio.h>
#include <stdlib.h>
 
#define MAXSIZE 10
#define OK	  1
#define FALSE 0 
 
typedef int Elemtype;
typedef bool Status;
 
typedef struct list
{
	Elemtype *elem;
	int len;        //數(shù)據(jù)個數(shù)
	int listsize;   //順序表長度
}List;
  • listsize 代表這個順序表的最大容量,可以隨時擴容
  • len 代表在你創(chuàng)建的這個順序表中有幾個有效的數(shù)據(jù),總是小于等于listsize

一、初始化順序表屬性

void list_init(List *L)
{
	L->elem=(Elemtype *)malloc(MAXSIZE*sizeof(Elemtype));//開辟空間
	if(L->elem==NULL)//判斷空間是否開辟成功
	{
		printf("malloc fail\n");
		exit(0);
	}
 
	L->len=0;	//初始化數(shù)據(jù)有效數(shù)據(jù)為0
	L->listsize=MAXSIZE;	//初始化數(shù)組長度為MAXSIZE
}

二、順序表的插入

Status list_insert(List *L,int i,Elemtype data)
{
	Elemtype *base,*insert,*p;
	if(i<1 || i>L->len+1 || L==NULL)
	{
		printf("位置輸入錯誤\n");
		return FALSE;
	}
	if(L->len > L->listsize)
	{
		base=(Elemtype *)realloc(L->elem,(L->listsize+MAXSIZE)*sizeof(Elemtype));//動態(tài)擴容
		L->elem=base;
		L->listsize+=MAXSIZE;//更新順序表大小
	}
	insert=&(L->elem[i-1]);//目標指針指向要插入的目標地址
	  //指向最后一個元素的地址
	for(p=L->elem + L->len-1;p>=insert;p--)
	{
		*(p+1)=*p;
	}
	*insert=data;
	L->len++;
	return OK;
}

三、刪除 

Status delete_list(List *L,int i)
{
	ElemType *q,*delete_i;
	if(L==NULL||i<0||i>L->len)
	return FALSE;
	delete_i=&(L->elem[i-1]);//用指針指向要刪除位置的地址
	q=L->elem + L->len-1;    //q指針指向順序表最后一個位置的地址   首地址加上數(shù)組長度就是最后一個元素地址
	for(delete_i=delete_i+1;delete_i<=q;++delete_i)//從刪除位置的地址的下一個元素開始,每個往前移動一位
	{
		*(delete_i-1)=*delete_i;		//前一個位置等于后一個
	}
	L->len--;
	
	return OK;
}

全部程序

#include <stdio.h>
#include <stdlib.h>
 
#define MAXSIZE 10
#define OK	  1
#define FALSE 0 
 
typedef int Elemtype;
typedef bool Status;
 
typedef struct list
{
	Elemtype *elem;
	int len;
	int listsize;
}List;
 
 
void list_init(List *L)
{
	L->elem=(Elemtype *)malloc(MAXSIZE*sizeof(Elemtype));//開辟空間
	if(L->elem==NULL)//判斷空間是否開辟成功
	{
		printf("malloc fail\n");
		exit(0);
	}
 
	L->len=0;	//初始化數(shù)據(jù)有效數(shù)據(jù)為0
	L->listsize=MAXSIZE;	//初始化數(shù)組長度為MAXSIZE
}
 
Status list_insert(List *L,int i,Elemtype data)
{
	Elemtype *base,*insert,*p;
	if(i<1 || i>L->len+1 || L==NULL)
	{
		printf("位置輸入錯誤\n");
		return FALSE;
	}
	if(L->len > L->listsize)
	{
		base=(Elemtype *)realloc(L->elem,(L->listsize+MAXSIZE)*sizeof(Elemtype));
		L->elem=base;
		L->listsize+=MAXSIZE;
	}
	insert=&(L->elem[i-1]);//目標指針指向要插入的目標地址
	  //指向最后一個元素的地址
	for(p=L->elem + L->len-1;p>=insert;p--)
	{
		*(p+1)=*p;
	}
	*insert=data;
	L->len++;
	return OK;
}
 
Status list_delete(List *L,int i)
{
	Elemtype *aim,*p;
	if(i<0 || i>L->len)
	{
		printf("位置輸入錯誤\n");
		return FALSE;
	}
	aim=&(L->elem[i-1]);//目標指針指向要刪除的目標地址
	p=(L->elem+L->len-1); //指向最后一個元素的地址
	for(aim=aim+1;aim<=p;++aim) //目標地址滑動刪除
	{
		*(aim-1)=*aim;
	}
	L->len--;
	return OK;
}
void show_list(List *L)
{
	int i;
	for(i=0;i<L->len;i++)
	{
		printf("elem[%d]=%d\n",i+1,L->elem[i]);
	}
	printf("\n");
}
int main()
{
	int i;
	List L;
	list_init(&L);
	for(i=0;i<10;i++)
	{
		list_insert(&L,i+1,i+1);
	}
	printf("插入前的順序表\n");
	show_list(&L);
 
	printf("插入后的順序表  在5位置插入99\n");
	list_insert(&L,5,99);
	show_list(&L);
 
	printf("刪除后的順序表  把5位置刪除\n");
	list_delete(&L,5);
	show_list(&L);
	return 0;
}
 

運行結果如下

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • C++設計模式中的觀察者模式一起來看看

    C++設計模式中的觀察者模式一起來看看

    這篇文章主要為大家詳細介紹了C++觀察者模式,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 一文帶你入木三分地理解字符串KMP算法以及C++實現(xiàn)

    一文帶你入木三分地理解字符串KMP算法以及C++實現(xiàn)

    KMP算法是一種改進的字符串匹配算法,KMP算法的核心是利用匹配失敗后的信息,盡量減少模式串與主串的匹配次數(shù)以達到快速匹配的目的。本文就來和大家聊聊KMP算法的原理與實現(xiàn),需要的可以參考一下
    2022-12-12
  • C語言SQLite3事務和鎖的操作實例

    C語言SQLite3事務和鎖的操作實例

    這篇文章主要介紹了C語言SQLite3事務和鎖的操作,結合完整實例形式分析了C語言針對SQLite3數(shù)據(jù)庫的事務與鎖相關操作技巧,需要的朋友可以參考下
    2017-07-07
  • Cocos2d-x UI開發(fā)之文本類使用實例

    Cocos2d-x UI開發(fā)之文本類使用實例

    這篇文章主要介紹了Cocos2d-x學習筆記之文本類,文本類是UI開發(fā)中經(jīng)常使用的,本文用詳細的代碼注釋講解了文本類的使用,需要的朋友可以參考下
    2014-09-09
  • C語言高級教程之變長數(shù)組詳解

    C語言高級教程之變長數(shù)組詳解

    這篇文章主要介紹了C語言中變長數(shù)組的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • C語言中操作utmp文件的相關函數(shù)用法

    C語言中操作utmp文件的相關函數(shù)用法

    這篇文章主要介紹了C語言中操作utmp文件的相關函數(shù)用法,包括getutent()函數(shù)和setutent()函數(shù)以及endutent()函數(shù),需要的朋友可以參考下
    2015-08-08
  • C++基礎知識總結

    C++基礎知識總結

    本文給大家匯總介紹了C++的一些基礎知識,不管是對新手還是老鳥都有些幫助,希望大家能夠喜歡
    2017-05-05
  • C++變位詞問題分析

    C++變位詞問題分析

    這篇文章主要介紹了C++變位詞問題分析,非常經(jīng)典的算法,對于進行C++下的算法設計有很大的啟發(fā)性,需要的朋友可以參考下
    2014-08-08
  • C語言如何實現(xiàn)Unix時間戳與本地時間轉(zhuǎn)化

    C語言如何實現(xiàn)Unix時間戳與本地時間轉(zhuǎn)化

    這篇文章主要介紹了C語言如何實現(xiàn)Unix時間戳與本地時間轉(zhuǎn)化的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • C++學習進階之Makefile基礎用法詳解

    C++學習進階之Makefile基礎用法詳解

    Makefile 通常指的是一個含有一系列命令(directive)的,通過 Make自動化編譯工具,幫助 C/C++ 程序?qū)崿F(xiàn)自動編譯目標文件的文件,這篇文章主要給大家介紹了關于C++學習進階之Makefile基礎用法的相關資料,需要的朋友可以參考下
    2021-07-07

最新評論

若尔盖县| 洛南县| 许昌市| 池州市| 毕节市| 翼城县| 麻江县| 苏尼特左旗| 黎平县| 罗江县| 澎湖县| 忻城县| 合作市| 同江市| 环江| 依兰县| 社旗县| 龙川县| 阿克苏市| 尤溪县| 湖北省| 独山县| 石河子市| 虹口区| 香格里拉县| 页游| 大兴区| 阿克| 沅江市| 济宁市| 扶沟县| 无为县| 琼海市| 喀喇沁旗| 仁怀市| 承德县| 庄浪县| 吴川市| 日照市| 奉节县| 嘉兴市|