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

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

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

首先聲明一個(gè)順序表的結(jié)構(gòu) (數(shù)組的第一個(gè)元素是0,但是順序表的第一個(gè)一般 從1(人為設(shè)定)開(kāi)始)

#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ù)個(gè)數(shù)
	int listsize;   //順序表長(zhǎng)度
}List;
  • listsize 代表這個(gè)順序表的最大容量,可以隨時(shí)擴(kuò)容
  • len 代表在你創(chuàng)建的這個(gè)順序表中有幾個(gè)有效的數(shù)據(jù),總是小于等于listsize

一、初始化順序表屬性

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

二、順序表的插入

Status list_insert(List *L,int i,Elemtype data)
{
	Elemtype *base,*insert,*p;
	if(i<1 || i>L->len+1 || L==NULL)
	{
		printf("位置輸入錯(cuò)誤\n");
		return FALSE;
	}
	if(L->len > L->listsize)
	{
		base=(Elemtype *)realloc(L->elem,(L->listsize+MAXSIZE)*sizeof(Elemtype));//動(dòng)態(tài)擴(kuò)容
		L->elem=base;
		L->listsize+=MAXSIZE;//更新順序表大小
	}
	insert=&(L->elem[i-1]);//目標(biāo)指針指向要插入的目標(biāo)地址
	  //指向最后一個(gè)元素的地址
	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]);//用指針指向要?jiǎng)h除位置的地址
	q=L->elem + L->len-1;    //q指針指向順序表最后一個(gè)位置的地址   首地址加上數(shù)組長(zhǎng)度就是最后一個(gè)元素地址
	for(delete_i=delete_i+1;delete_i<=q;++delete_i)//從刪除位置的地址的下一個(gè)元素開(kāi)始,每個(gè)往前移動(dòng)一位
	{
		*(delete_i-1)=*delete_i;		//前一個(gè)位置等于后一個(gè)
	}
	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));//開(kāi)辟空間
	if(L->elem==NULL)//判斷空間是否開(kāi)辟成功
	{
		printf("malloc fail\n");
		exit(0);
	}
 
	L->len=0;	//初始化數(shù)據(jù)有效數(shù)據(jù)為0
	L->listsize=MAXSIZE;	//初始化數(shù)組長(zhǎng)度為MAXSIZE
}
 
Status list_insert(List *L,int i,Elemtype data)
{
	Elemtype *base,*insert,*p;
	if(i<1 || i>L->len+1 || L==NULL)
	{
		printf("位置輸入錯(cuò)誤\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]);//目標(biāo)指針指向要插入的目標(biāo)地址
	  //指向最后一個(gè)元素的地址
	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("位置輸入錯(cuò)誤\n");
		return FALSE;
	}
	aim=&(L->elem[i-1]);//目標(biāo)指針指向要?jiǎng)h除的目標(biāo)地址
	p=(L->elem+L->len-1); //指向最后一個(gè)元素的地址
	for(aim=aim+1;aim<=p;++aim) //目標(biāo)地址滑動(dòng)刪除
	{
		*(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;
}
 

運(yùn)行結(jié)果如下

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

相關(guān)文章

  • 利用Qt實(shí)現(xiàn)獲取計(jì)算機(jī)的硬件信息

    利用Qt實(shí)現(xiàn)獲取計(jì)算機(jī)的硬件信息

    在開(kāi)發(fā)時(shí),常常會(huì)需要用到計(jì)算機(jī)的相關(guān)信息。利用這些信息,我們可以開(kāi)發(fā)一些輔助模塊。本文將利用Qt實(shí)現(xiàn)獲取計(jì)算機(jī)的硬件信息,感興趣的可以嘗試一下
    2022-12-12
  • C++中const char*、char const*、char * const三者的區(qū)別

    C++中const char*、char const*、char * const三者的區(qū)別

    這篇文章主要介紹了C++中const char*、char const*、char * const三者的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • C++ 的三種訪問(wèn)權(quán)限與三種繼承方式

    C++ 的三種訪問(wèn)權(quán)限與三種繼承方式

    我們知道C++中的類(lèi),有三種訪問(wèn)權(quán)限(也稱(chēng)作訪問(wèn)控制),它們分別是public、protected、private,C++中繼承的方式還有多種。下面通過(guò)本文給大家詳細(xì)介紹,對(duì)c++中的訪問(wèn)權(quán)限和繼承方式感興趣的朋友一起看看吧
    2016-11-11
  • C語(yǔ)言中動(dòng)態(tài)內(nèi)存管理圖文詳解

    C語(yǔ)言中動(dòng)態(tài)內(nèi)存管理圖文詳解

    在編寫(xiě)程序時(shí),通常并不知道需要處理的數(shù)據(jù)量,或者難以評(píng)估所需處理數(shù)據(jù)量的變動(dòng)程度,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中動(dòng)態(tài)內(nèi)存管理的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • C++實(shí)現(xiàn)AVL樹(shù)的示例詳解

    C++實(shí)現(xiàn)AVL樹(shù)的示例詳解

    AVL Tree 是一個(gè)「加上了額外平衡條件」的二叉搜索樹(shù),其平衡條件的建立是為了確保整棵樹(shù)的深度為O(log_2N),本文主要介紹了AVL樹(shù)的實(shí)現(xiàn),需要的可以參考一下
    2023-03-03
  • C++中volatile關(guān)鍵字的使用詳解以及常見(jiàn)的誤解

    C++中volatile關(guān)鍵字的使用詳解以及常見(jiàn)的誤解

    volatile 關(guān)鍵字是一種類(lèi)型修飾符,用它聲明的類(lèi)型變量表示可以被某些編譯器未知的因素更改,比如:操作系統(tǒng),硬件或者其他線程等
    2020-01-01
  • C++實(shí)現(xiàn)LeetCode(36.驗(yàn)證數(shù)獨(dú))

    C++實(shí)現(xiàn)LeetCode(36.驗(yàn)證數(shù)獨(dú))

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(36.驗(yàn)證數(shù)獨(dú)),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++設(shè)計(jì)模式之模板方法模式

    C++設(shè)計(jì)模式之模板方法模式

    這篇文章主要介紹了C++設(shè)計(jì)模式之模板方法模式,本文講解了什么是模板方法模式、模板方法模式的UML類(lèi)圖、模板方法模式的使用場(chǎng)合等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • C語(yǔ)言中pow函數(shù)使用方法、注意事項(xiàng)以及常見(jiàn)報(bào)錯(cuò)原因

    C語(yǔ)言中pow函數(shù)使用方法、注意事項(xiàng)以及常見(jiàn)報(bào)錯(cuò)原因

    在c語(yǔ)言當(dāng)中我們要計(jì)算一個(gè)數(shù)的n次方時(shí)候,可以使用多種方法,但是也有一種比較簡(jiǎn)單的方法,便是調(diào)用一個(gè)函數(shù)pow函數(shù),下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中pow函數(shù)使用方法、注意事項(xiàng)以及常見(jiàn)報(bào)錯(cuò)原因的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • 淺析C++中的間接宏函數(shù)

    淺析C++中的間接宏函數(shù)

    這篇文章主要介紹了C++中的間接宏函數(shù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04

最新評(píng)論