静态顺序表的初始化以及插入删除操作

mac2025-12-22  8

静态顺序表的初始化以及插入删除操作

– 在编写之前首先需要说明,在使用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); 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 ); return 0; } 输出如下所示

-

最新回复(0)