#include <stdio.h> //顺序表初始化,插入及删除操作实战 #define MAXSIZE 100 typedef int Element;//让顺序表存储其他类型的数据时,可修改int 从而达到快速修改数据类型的目的。 typedef struct{ Element date[MAXSIZE]; int length; }Seqlist; bool list_insert(Seqlist &L,int pos,Element x){//pos代表要插入的位置 因为插入和删除动作都要涉及到修改顺序表,因此我们需要用到引用。 if(pos<1||pos>L.length+1){//判断出拆入的位置是都合法,不能是第一个之前,已不能是第n+1个之后 return false;//如果走到这里,一遇到 return 函数就会结束,因此如果是return false函数就不会再往下执行 } //判断我的表有没有满 if(L.length>=MAXSIZE){ return false; } for(int j=L.length;j>=pos;j--){ L.date[j]=L.date[j-1];//插入操作,就是从第i个位置的起,所有的数全部往后以一个单位。 } L.date[pos-1]=x;//将数组中的值移完之后,进行插入的动作 L.length++;//顺序表的长度要加一 return true;//bool类型的函数需要返回是ture 或false } void print_list(Seqlist L){ for(int i=0;i<L.length;i++){ printf("%3d",L.date[i]); } printf("\n"); } //顺序表删除操作,pos代表我们要删除的第pos个位置,x是我们要删除的数 bool list_delete(Seqlist &L,int pos,Element &x){//删除操作,只需判断我要删除的数据位置合不合法,有没有在我的length之内就好 if(pos<1||pos>L.length){ return false; } x=L.date[pos-1];//用一个x变量来接收我们要删除的那个数,因为我们要在子函数中修改x的值,所以我们可以看到函数调用中形参加了引用 for (int j=pos-1;j<L.length-1;j++){//这里对j的初始化 可以是pos也可以是pos-1 破碎带表弟几个位值,pos-1代表要删除的数在数组中的下标 L.date[j]=L.date[j+1]; } L.length--;//这里很重要,记得长度要减一,要不然打印的时候,我们会把表尾打印两次 return true; } int locate_list(Seqlist L,Element x){//这是一个很简单的按值查找,查找的时候我我们不需要对顺序表中的数进行修改,因此我们不需要进行引用 for(int i=0;i<L.length;i++){ if(L.date[i]==x){ return i+1;//下表从零开始,因此我们要返回i+1。 } } return 0;//循环结束没找到,返回零。 } int main() { Seqlist L; Element x=0; bool ret; int rst; L.date[0]=0; L.date[1]=1; L.date[2]=2; L.length=3; ret=list_insert(L,3,60); if(ret){ printf("insert sucessful\n");//clion 不可以用中文 } else{ printf("insert failed\n"); } print_list(L); ret=list_delete(L,3,x); if(ret){ printf("delete sucessful\n"); printf("deleted number=%d\n",x); print_list(L); }else{ printf("delete false\n"); } rst=locate_list(L,60); if(rst){ printf("locate successful"); }else{ printf("locate failed"); } return 0; }
数据结构顺序表插入 删除 按值查找,详细注释,希望帮到你
于 2023-04-22 11:08:33 首次发布