静态顺序表的初始化以及插⼊删除操作
静态顺序表的初始化以及插⼊删除操作
– 在编写之前⾸先需要说明,在使⽤C语⾔编写时,在⾃定义外函数(也就是在main函数体之外)体内不能使⽤ & 符号以及“ . ”符号,取⽽代之的是 * 号以及“ -> ”符号
1. ⾸先是静态顺序表结构体的编写
typedef struct
{
int data[MaxSize];
int length;
}Sqlist;
2. 初始化
void InitList(Sqlist *L)
{
L->length =0;
}
3. 插⼊操作
bool ListInsert(Sqlist *L,int i,int e){
if(i<1||i>L->length+1)
{
return false;
}
if(L->length>=MaxSize)
{
return false;
}
for(int j =L->length; j>=i;++j)
{
L->data[j]=L->data[j-1];
}
L->data[i-1]=e;
L->length++;
return true;
}
4. 删除操作
在这⾥我们是按照所在位置进⾏删除,i 是元素的位置,使⽤ empt 对删除的元素进⾏返回
bool ListDelet(Sqlist *L,int i,int*empt){
if(L->length<1||i<1||i>=L->length)
{
return false;
}
*empt=L->data[i];
for(int j = i; j< L->length-1;++j)
{
L->data[j]=L->data[j+1];
}
L->length--;
return true;
}
对元素进⾏查删除,删除所有对应的元素,这⾥的 i 是指我们要删除的元素,⽽ empt 则是⽤来返回删除的个数
bool ListValueDelet(Sqlist *L,int i,int*empt){ if(L->length<1)
{
return false;
}
int k=0;
for(int j =0; j< L->length-k;++j)
{
while(L->data[j]==i){
for(int n = j; n < L->length-k-1;++n)
{
L->data[n]=L->data[n+1];
}
++k;
}
}
*empt=k;
L->length-=k;
return true;
}
完整代码如下
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
#define MaxSize 50
#define bool int
#define true 1
#define false 0
//结构体定义
typedef struct
{
int data[MaxSize];
int length;
}Sqlist;
//初始化
void InitList(Sqlist *L)
{
L->length =0;
}
//插⼊操作
bool ListInsert(Sqlist *L,int i,int e){
if(i<1||i>L->length+1)
{
return false;
}
if(L->length>=MaxSize)
{
return false;
}
for(int j =L->length; j>=i;++j)
{
L->data[j]=L->data[j-1];
}
L->data[i-1]=e;
L->length++;
return true;
}
//按位置进⾏删除
bool ListDelet(Sqlist *L,int i,int*empt){
if(L->length<1||i<1||i>=L->length)
{
return false;
}
*empt=L->data[i];
for(int j = i; j< L->length-1;++j)
{
L->data[j]=L->data[j+1];
}
L->length--;
return true;
}
//按值查删除
bool ListValueDelet(Sqlist *L,int i,int*empt){ if(L->length<1)
{
return false;
}
int k=0;
for(int j =0; j< L->length-k;++j)
{
while(L->data[j]==i){
for(int n = j; n < L->length-k-1;++n)
{
L->data[n]=L->data[n+1];
}
++k;
}
}
*empt=k;
L->length-=k;
return true;
}
int main()
{
Sqlist L;
InitList(&L);
c语言listinsert函数
ListInsert(&L,1,8);
ListInsert(&L,2,9);
ListInsert(&L,3,10);
ListInsert(&L,4,6);
ListInsert(&L,5,6);
ListInsert(&L,6,6);
ListInsert(&L,7,4);
for(int i =0; i < L.length;++i)
{
printf("%d ", L.data[i]);
}
printf("顺序表的长度为:%d\n",L.length );
int empt;
ListDelet(&L,2,&empt);
printf("删除的元素为:%d\n",empt);
for(int i =0; i < L.length;++i)
{
printf("%d ", L.data[i]);
}
printf("顺序表的长度为:%d\n",L.length );
int count;
ListValueDelet(&L,6,&count);
printf("删除元素6的次数为:%d\n",count); for(int i =0; i < L.length;++i)
{
printf("%d ", L.data[i]);
}
printf("顺序表的长度为:%d\n",L.length ); return0;
}
输出如下所⽰
-
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论