目录
问题描述
【问题描述】
顺序表基础练习,包含初始化顺序表、建立顺序表、插入元素、查找元素、删除元素、输出顺序表中元素方法。
要求使用插入元素方法建立顺序表,通过查询方法找到输入的元素值,并删除第一个等于输入值的元素,最后输出表中元素。
【输入形式】
第一行输入顺序表长度N,
第二行输入N个元素
第三行输入待查找删除的元素。
【输出形式】
输出删除元素后的顺序表。
【样例输入1】5
10 12 14 18 12
12
【样例输出1】
10 14 18 12
【样例输入2】
3
10 18 12
13
【样例输出2】
10 18 12
完整代码
#include<stdio.h>
#include<malloc.h>
#define SIZE 10
#define INCREAM 10
typedef struct list{
int *data;
int len;
int size;
}list,*plist;
void init_list(plist L){
L->data=(int *)malloc(SIZE*sizeof(int));
L->len=0;
L->size=SIZE;
}
int insert_list(plist L,int i,int e){
int j;
if(i>L->len+1||i<1){
return 0;
}
if(L->len==L->size){
L->data=(int *)realloc(L->data,(L->size+INCREAM)*sizeof(int));
L->size+=INCREAM;
}
for(j=L->len-1;j>=i-1;j--){
L->data[j+1]=L->data[j];
}
L->data[i-1]=e;
L->len++;
return 1;
}
int delete_list(plist L,int val){
int i,j=-1;
for(i=0;i<L->len;i++){
if(L->data[i]==val){
j=i;
break;
}
}
if(j!=-1){
for(i=j;i<L->len;i++){
L->data[i]=L->data[i+1];
}
L->len--;
}else{
return 0;
}
return 1;
}
void print_list(plist L){
int i;
for(i=0;i<L->len;i++){
printf("%d ",L->data[i]);
}
printf("\n");
}
int main(){
int n,i,k;
list p;
init_list(&p);
scanf("%d",&n);
for(i=1;i<=n;i++){
int e;
scanf("%d",&e);
insert_list(&p,i,e); //这里我通过插入操作实现顺序表的创建
}
scanf("%d",&k);
delete_list(&p,k);
print_list(&p);
}
程序分析
1. 第一行包含了两个头文件,分别是<stdio.h>和<malloc.h>,前者包含了输入输出相关的函数,后者包含了动态内存分配相关的函数。
2. 接着定义了常量SIZE和INCREAM,分别表示顺序表的初始容量和每次动态扩容的增加量。
3. 定义了一个结构体list,包含了一个指向int类型的数组data,表示存储数据的数组,一个整型变量len,表示当前顺序表的长度,以及一个整型变量size,表示当前顺序表的容量。
4. 定义了一个plist类型,是指向list结构体的指针类型。
5. init_list函数用于初始化顺序表,即申请SIZE个int类型的动态内存,并将长度和容量初始化为0和SIZE。
6. insert_list函数用于在顺序表的第i个位置插入元素e,若i不在合法范围内则返回0,否则先判断当前容量是否已满,若已满则通过realloc函数动态增加容量,然后将从i-1到len-1的元素后移一个位置,最后在i-1位置插入元素e,并将长度加1,返回1表示插入成功。
7. delete_list函数用于在顺序表中删除值为val的元素,若不存在则返回0,否则从顺序表中找到第一个值为val的元素,将该元素后面的元素依次向前移动一个位置,最后将长度减1,返回1表示删除成功。
8. print_list函数用于遍历顺序表并输出所有元素。
9. 在主函数中,首先读入n表示顺序表中元素个数,然后通过循环读入n个元素,并依次插入到顺序表中。
10. 接着读入k表示要删除的元素值,调用delete_list函数进行删除操作。
11. 最后调用print_list函数输出删除后的顺序表中的所有元素。
运行结果
本节文章
顺序表 | ||
1 | C语言实现顺序表的插入、删除 | https://want595.blog.csdn.net/article/details/126967798 |
2 | 顺序表基本练习-初始化、插入和输出 | https://want595.blog.csdn.net/article/details/127737121 |
3 | 顺序表基本练习-删除元素 | https://want595.blog.csdn.net/article/details/127737165 |
4 | 顺序表基本操作-查找 | https://want595.blog.csdn.net/article/details/127737191 |
5 | 顺序表删除重复元素 | https://want595.blog.csdn.net/article/details/126998125 |
6 | 顺序表实现集合并集 | https://want595.blog.csdn.net/article/details/127737454 |
7 | 顺序表元素循环左移(new) | https://want595.blog.csdn.net/article/details/128281975 |
8 | 删除顺序表中最小值 | https://want595.blog.csdn.net/article/details/126984319 |
9 | 递增顺序表插入 | https://want595.blog.csdn.net/article/details/126990708 |
10 | 将顺序表非零元素依次移到表的前端 | https://want595.blog.csdn.net/article/details/127737349 |
11 | 删除顺序表中第一个值等于x的元素 | https://want595.blog.csdn.net/article/details/127619864 |
12 | 在顺序表中,输入一个元素插入到原表的最小元素之前 | https://want595.blog.csdn.net/article/details/127365247 |