#include <stdio.h> #include<stdlib.h> void insl(int v[],int m,int*n,int i,int b) //插入函数 { int j; if(*n==m) //存储空间已满时,出现"上溢"错误,不能进行插入 { printf("overflow\n"); return; } if(i>*n) i=*n+1; //i>n认为在最后一个元素之后 if(i<1) i=1; //i<1认为在第一个元素之前插入 for(j=*n;j>=i;j--) v[j]=v[j-1]; v[i-1]=b; *n=*n+1; for(j=0;j<*n;j++) printf("%5d",v[j]); printf("\n"); return; } void desl(int v[],int m,int*n,int i) //删除函数 { int j; if(*n==0) //线性表为空时,出现"下溢"错误不能进行删除 { printf("underflow\n"); return; } if(i<1||i>*n) //i<1或者i>n时认为没有这个元素,不能进行删除 { printf("not this element in the list\n"); return; } for(j=i;j<=*n-1;j++) v[j-1]=v[j]; *n=*n-1; for(j=0;j<*n;j++) printf("%5d",v[j]); printf("\n"); return; } void main() { int*v, m=20,*n,i,j,b,t; n=(int*)malloc(sizeof(int)); v=(int*)malloc(m*sizeof(int)); printf("输入数的个数(t<20)"); scanf("%d",&t); printf("输入t个数"); for(j=0;j<t;j++) scanf("%d",&v[j]); n=&t; printf("插入数的位置及数:"); scanf("%d%d",&i,&b); insl(v,m,n,i,b); printf("删除数的位置:"); scanf("%d",&i); desl(v, m,n, i); free(v);free(n); //释放建立的线性表空间 return; } 根据给定的文件信息,我们可以总结出以下关于“线性表的运算”的相关知识点: ### 线性表概述 线性表是数据结构中最基本的一种逻辑结构,它由一系列具有相同特性的数据元素组成,并且这些数据元素之间存在一种线性的关系。线性表中的每个元素都有一个直接前驱和一个直接后继(除了第一个元素没有直接前驱、最后一个元素没有直接后继之外)。线性表可以通过数组或链表等多种方式实现。 ### 线性表的基本运算 线性表的基本运算包括查找、插入、删除等操作。在给定的代码示例中,主要实现了插入和删除两种操作。 #### 插入操作 插入操作是指在表中的某个位置插入一个新元素。在给定的代码中,`insl` 函数实现了这一功能。 **参数说明**: - `v[]`:线性表,用一维数组表示。 - `m`:线性表的最大容量。 - `*n`:当前线性表的实际元素数量。 - `i`:插入位置,数组下标从 1 开始计算。 - `b`:待插入的元素值。 **插入逻辑**: 1. **检查空间是否足够**:如果当前元素数量等于最大容量,则无法插入,返回“overflow”提示。 2. **处理插入位置**:如果插入位置大于当前元素数量,则默认插入到末尾;如果小于 1,则默认插入到开头。 3. **移动元素**:从当前位置到最后一个元素,每个元素向后移动一位。 4. **插入元素**:将待插入的元素放在指定位置。 5. **更新元素数量**:增加当前元素的数量。 6. **输出结果**:打印当前线性表的所有元素。 #### 删除操作 删除操作是指移除表中的某个元素。在给定的代码中,`desl` 函数实现了这一功能。 **参数说明**: - `v[]`:线性表,用一维数组表示。 - `m`:线性表的最大容量。 - `*n`:当前线性表的实际元素数量。 - `i`:删除位置,数组下标从 1 开始计算。 **删除逻辑**: 1. **检查表是否为空**:如果当前元素数量为 0,则无法删除,返回“underflow”提示。 2. **检查删除位置**:如果删除位置小于 1 或者大于当前元素数量,则不存在该位置的元素,返回提示信息。 3. **移动元素**:从删除位置开始,将后面的每个元素向前移动一位。 4. **更新元素数量**:减少当前元素的数量。 5. **输出结果**:打印当前线性表的所有元素。 ### 示例程序分析 给定的代码中包含了一个 `main` 函数,用于演示如何使用上述的插入和删除函数。 1. **初始化线性表**:首先分配内存空间来创建一个最大容量为 20 的线性表,并读取用户输入的数据来填充线性表。 2. **插入操作**:根据用户提供的位置和元素值,调用 `insl` 函数进行插入操作。 3. **删除操作**:根据用户提供的位置,调用 `desl` 函数进行删除操作。 4. **释放内存**:在所有操作完成后,释放之前分配的内存空间。 通过以上分析可以看出,该程序简单而完整地展示了线性表的插入和删除操作的具体实现方法,对于理解线性表的基本概念及其操作具有一定的参考价值。
#include<stdlib.h>
void insl(int v[],int m,int*n,int i,int b) //插入函数
{
int j;
if(*n==m) //存储空间已满时,出现"上溢"错误,不能进行插入
{
printf("overflow\n");
return;
}
if(i>*n) i=*n+1; //i>n认为在最后一个元素之后
if(i<1) i=1; //i<1认为在第一个元素之前插入
for(j=*n;j>=i;j--)
v[j]=v[j-1];
v[i-1]=b;
*n=*n+1;
for(j=0;j<*n;j++)
printf("%5d",v[j]);
printf("\n");
return;
}
void desl(int v[],int m,int*n,int i) //删除函数
{
int j;
if(*n==0) //线性表为空时,出现"下溢"错误不能进行删除
{
printf("underflow\n");
return;
}
if(i<1||i>*n) //i<1或者i>n时认为没有这个元素,不能进行删除
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助