通过这几天的代码实操,总算是把顺序表的建立、顺序表的插入与删除以及顺序表的按位查找和按值查找搞明白了!
这次的代码有点长,其实也就是把之前的顺序表的代码积攒在一起了,部分都搞明白了,只需要把每个部分都组装起来就行了。
学习任何东西都是一样,当你把一个章节的每个知识点都搞懂之后,不妨去将这些组合成一个整体,说不定会有奇效哦!
#include<stdio.h>
#include<stdlib.h>
//顺序表:顺序表的建立、顺序表的插入与删除、顺序表的基本操作(按位查找、按值查找)
//顺序表的定义
#define InitSize 10
typedef struct{
int *data;
int length;
int MaxSize;
}SeqList;
//顺序表的初始化
void InitList(SeqList &L){
L.data=(int *)malloc(InitSize*sizeof(int));
L.length=10;
L.MaxSize=InitSize;
}
//顺序表的增加
void IncreaseList(SeqList &L,int len){
int *p=L.data;
L.data=(int *)malloc((L.MaxSize+len)*sizeof(int));
L.MaxSize=L.MaxSize+len;
for(int i=0;i<L.length;i++){
L.data[i]=p[i];
}
printf("增加后的顺序表的空间为:%dn",L.MaxSize);
free(p);
}
//顺序表的插入
bool InsertList(SeqList &L,int i,int e){
if(i<1||i>L.length+1){
return false;
}
if(L.length==L.MaxSize){
return false;
}
//一切判断无误后
for(int j=L.length;j>=i;j--){
L.data[j]=L.data[j-1];//第i个位置后的数据往后移,从最后的数据开始
}
L.length++;
L.data[i-1]=e;
return true;
}
//顺序表的删除
bool DeleteList(SeqList &L,int i,int &n){
if(i<1||i>L.length){
return false;
}
//一切判断无误后,开始删除
n=L.data[i-1];
for(int j=i;j<L.length;j++){
L.data[j-1]=L.data[j];//第i个位置后的数据,从第i个位置的后一位开始
}
L.length--;
return true;
}
//顺序表的按位查找
void LocateList(SeqList &L,int i){
if(i<1||i>L.length){
printf("输入位置%d不合法n",i);
}
else{
printf("位置%d的值为:%dn",i,L.data[i-1]);
}
}
//顺序表的按值查找
int DataList(SeqList &L,int n){
for(int i=0;i<L.length;i++){
if(L.data[i]==n){
printf("查询成功!顺序表的%d值的位置为:%dn",n,i+1);
return 0;
}
}
printf("查询失败!顺序表中没有该值n");
return 0;
}
//顺序表的调用
int main(){
SeqList L;
InitList(L);
printf("给顺序表中的%d个空间赋值:n",L.length);
for(int i=0;i<L.length;i++){
scanf("%d",&L.data[i]);
}
IncreaseList(L,5);//顺序表的空间增加
if(InsertList(L,2,5)){//顺序表的调用
printf("插入成功!插入后的顺序表为:n");
for(int i=0;i<L.length;i++){
printf("%d ",L.data[i]);
}
}
else
printf("插入失败!n");
int a=5;
if(DeleteList(L,2,a)) {//顺序表的删除
printf("删除成功!删除后的顺序表为:n");
for(int i=0;i<L.length;i++){
printf("%d ",L.data[i]);
}
}
else
{
printf("删除失败!n");
}
LocateList(L,5);//按位查找
DataList(L,4);//按值查找
}
希望以上代码能给大家带来帮助,多多批评指正吧!!!