您的位置:首页 > 编程语言 > C语言/C++

C语言实现对顺序表的增删改查

2017-10-21 00:25 429 查看

C语言实现对顺序表的增删改查

顺序表的概念

采用顺序储存结构的线性表称为顺序表,他的数据元素按照逻辑顺序依次有放在一组连续的储存单元之中。逻辑上相邻的数据元素,其储存位置也彼此相邻

顺序表的主要算法

(1).在表中第i个位置插入新元素x

第一步,判断插入位置的合理性以及表是否已满;

第二步,从最后一个元素开始依次向前,将每个元素向后移动一个位置,直到第i个元素位置;

第三步,向空出的第i个位置存入新元素x;

第四步,最后还要将线性表长度加1;

代码如下:

int Insert(int line[],int num,int length,int place){
if(num<1||num>length+1){
return -1;
}else{
int j;
for(j=length-1;j>=place-1;j--){
line[j+1]=line[j];
}
line[place-1]=num;
return 1;
}
}


(2).在表中删除第i个元素

- 第一步,判断删除位置的合理性;

- 第二步,从第i+1个元素开始,依次向后直到最后一个元素为止,将每个元素向前移动一个位置,这是第i个元素已经被删除覆盖;

- 第三步,最后还要将线性表长度减1;

代码如下:

int Delete(int line[],int num,int length){
if(num<0||num>length){
return 2;
}else{
int j;
for(j=num;j<=length-1;j++){
line[j-1]=line[j];
}
return 1;
}
}


(3).在表中查找某个元素

查找元素的情况相较于前面的算法来说相对要复杂一些。如果数据元素是整数、实数这些基本数据类型,那么查找元素时自然就是与数据元素本身进行对比。如果数据元素是包含多个属性的结构体或者对象,那么查找元素往往是与数据元素的某个属性比较。接下来演示的是相对的数据元素的直接比较的情况。

代码如下

int Search(int line[],int num,int length){
int i;
for(i=0;i<=length;i++){
if(line[i]==num){
return i;
}
}
return -1;
}


接下来贴出完整的示例代码:

#include <stdio.h>
#include <stdlib.h>
#define N 30
int Search(int line[],int num,int length);//传入数组,需要查找的元素,数组长度,
int Delete(int line[],int num,int length);//传入数组,需要删除的元素位置,数组长度
int Insert(int line[],int num,int length,int place);//传入数组,需要插入的数值,数组长度,插入位置
int Alter(int line[],int num,int length,int place);//传入数组,需要修改为的值,数组长度,修改的位置
void ReadLine(int line[],int length);//读取输入
void PrintLine(int line[],int length);//打印数组
int main()
{
int n,m,num;
int line
;
int length,place;
while(1){
printf("你需要执行的功能:\n1:删除一个元素\n2.查找一个元素\n3.输入数组元素\n4.查看数组元素\n5.插入一个元素\n6.修改数组中的元素\n");
scanf("%d",&n);
switch(n){
case 1:
printf("输入你需要删除的元素坐标\n");
scanf("%d",&num);
printf("\n");
m=Delete(line,num,length);
if(m!=2){
printf("success\n");
length=length-1;
}else{
printf("false\n");
}
break;
case 2:
printf("输入需要查找的元素\n");
scanf("%d",&num);
m=Search(line,num,length);
if(m<0){
printf("false!",m);
}else{
printf("%d\n",m);
}
break;
case 3:
printf("输入数组长度\n");
scanf("%d",&length);
ReadLine(line,length);
break;
case 4:
PrintLine(line,length);
break;
case 5:
printf("输入您需要插入的位置\n");
scanf("%d",&place);
printf("输入您需要在该位置插入的元素");
scanf("%d",&num);
m=Insert(line,num,length,place);
if(m>=0){
printf("插入成功\n");
}else{
printf("插入失败\n");
}
length=length+1;
break;
case 6:
printf("输入你需要修改的元素位置\n");
scanf("%d",&place);
printf("输入用来替换该位置的元素\n");
scanf("%d",&num);
m=Alter(line,num,length,place);
if(m>=0){
printf("修改成功\n");
}else{
printf("修改失败\n");
}
break;
default:
printf("输入错误,请重启程序!\n");
return 0;

}
}
}
int Alter(int line[],int num,int length,int place){
if(num<1||num>length+1){
return -1;
}else{
line[place]=num;
return 1;
}
}
int Delete(int line[],int num,int length){ if(num<0||num>length){ return 2; }else{ int j; for(j=num;j<=length-1;j++){ line[j-1]=line[j]; } return 1; } }
int Insert(int line[],int num,int length,int place){ if(num<1||num>length+1){ return -1; }else{ int j; for(j=length-1;j>=place-1;j--){ line[j+1]=line[j]; } line[place-1]=num; return 1; } }
void ReadLine(int line[],int length){
int i;
for(i=0;i<length;i++){
printf("输入数组元素\n");
scanf("%d",&line[i]);
}

}
int Search(int line[],int num,int length){ int i; for(i=0;i<=length;i++){ if(line[i]==num){ return i; } } return -1; }
void PrintLine(int line[],int length){
int i;
if(length>=N){
printf("没有数组,请创建数组\n");
}else{
for(i=0;i<length;i++){
printf("%3d",line[i]);
}
printf("\n");
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息