C語言實(shí)現(xiàn)順序表的插入刪除
首先聲明一個(gè)順序表的結(jié)構(gòu) (數(shù)組的第一個(gè)元素是0,但是順序表的第一個(gè)一般 從1(人為設(shè)定)開始)
#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));//開辟空間
if(L->elem==NULL)//判斷空間是否開辟成功
{
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è)元素開始,每個(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));//開辟空間
if(L->elem==NULL)//判斷空間是否開辟成功
{
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)文章
一文帶你入木三分地理解字符串KMP算法以及C++實(shí)現(xiàn)
KMP算法是一種改進(jìn)的字符串匹配算法,KMP算法的核心是利用匹配失敗后的信息,盡量減少模式串與主串的匹配次數(shù)以達(dá)到快速匹配的目的。本文就來和大家聊聊KMP算法的原理與實(shí)現(xiàn),需要的可以參考一下2022-12-12
Cocos2d-x UI開發(fā)之文本類使用實(shí)例
這篇文章主要介紹了Cocos2d-x學(xué)習(xí)筆記之文本類,文本類是UI開發(fā)中經(jīng)常使用的,本文用詳細(xì)的代碼注釋講解了文本類的使用,需要的朋友可以參考下2014-09-09
C語言高級(jí)教程之變長(zhǎng)數(shù)組詳解
這篇文章主要介紹了C語言中變長(zhǎng)數(shù)組的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
C語言中操作utmp文件的相關(guān)函數(shù)用法
這篇文章主要介紹了C語言中操作utmp文件的相關(guān)函數(shù)用法,包括getutent()函數(shù)和setutent()函數(shù)以及endutent()函數(shù),需要的朋友可以參考下2015-08-08
C語言如何實(shí)現(xiàn)Unix時(shí)間戳與本地時(shí)間轉(zhuǎn)化
這篇文章主要介紹了C語言如何實(shí)現(xiàn)Unix時(shí)間戳與本地時(shí)間轉(zhuǎn)化的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
C++學(xué)習(xí)進(jìn)階之Makefile基礎(chǔ)用法詳解
Makefile 通常指的是一個(gè)含有一系列命令(directive)的,通過 Make自動(dòng)化編譯工具,幫助 C/C++ 程序?qū)崿F(xiàn)自動(dòng)編譯目標(biāo)文件的文件,這篇文章主要給大家介紹了關(guān)于C++學(xué)習(xí)進(jìn)階之Makefile基礎(chǔ)用法的相關(guān)資料,需要的朋友可以參考下2021-07-07

