按照题目来讲比较好,如题:
本题要求实现顺序表的基本操作集,如初始化、查找、插入、删除等操作。
稍微说一下,这几个操作是非常非常重要的,希望你们看完我的代码可以自己思考一下为什么要这样,为什么会这样,原理到底是什么呢?
函数接口定义:
List MakeEmpty();
void PrintL(List L);
Position Find( List L, ElementType X );
bool Insert( List L, ElementType X, int i);
bool Delete( List L, int i);
这个是题目给出的函数,分别是顺序表的初始化,打印顺序表,查找数据的位置并返回下标,插入和删除。
然后呢,其中List结构定义如下:
typedef int Position;
typedef struct LNode *List;
struct LNode {
ElementType Data[MAXSIZE];
Position Last; /* 保存线性表中最后一个元素的位置 */
};
最后是要求:
各个操作函数的定义为:
(1)List MakeEmpty():创建并返回一个空的线性表。
(2)void PrintL(List L):顺序打印顺序表L里面的数据元素。打印要求:“顺序表的值为:”(按顺序打印顺序表中的数据元素,每个数据元素之后有一个空格,打印结束之后打印换行符)
(3)Position Find( List L, ElementType X ):在线性表L中查找X,若找到,则返回线性表中X的位置;若找不到则返回ERROR。
(4)bool Insert( List L, ElementType X, int i ):将X插入位序i并返回true。若空间已满,则打印“顺序表满,无法插入”并返回false;如果参数i指向非法位置,则打印“插入位置不合法”并返回false。
(5)bool Delete( List L, int i):将位序为i的元素删除并返回true。若参数i指向非法位置,则打印“位序i不存在元素”(其中i是参数值)并返回false。
具体代码如下:
List MakeEmpty(){
List L;
L=(List)malloc(sizeof(struct LNode));
L->Last=-1;
return L;
}
void PrintL(List L){
int i=0;
printf("顺序表的值为:");
for(;i<=L->Last;i++){
printf("%d ",L->Data[i]);
}
printf("\n");
}
Position Find( List L, ElementType X ){
int a=L->Last;
int b=0;
for(int i=0;i<=a;i++){
if(L->Data[i]==X){
b=1;
return i;
}
}
return ERROR;
}
bool Insert( List L, ElementType X, int i){
if(L->Last==MAXSIZE-1){
printf("顺序表满,无法插入\n");
return false;
}
if(i<1||i>MAXSIZE){
printf("插入位置不合法\n");
return false;
}
int a;
i=i-1;
for(a=L->Last;a>=i;a--){
L->Data[a+1]=L->Data[a];
}
L->Data[i]=X;
L->Last++;
return true;
}
bool Delete( List L, int i){
if(i<1||i>L->Last+1){
printf("位序%d不存在元素\n",i);
return false;
}
i=i-1;
int a;
for(a=i;a<L->Last;a++){
L->Data[a]=L->Data[a+1];
}
L->Last--;
return true;
}
这种写法比较基础,有些书本差不多就是这样的,肯定还有更好的代码,希望你们的补充
一些细节问题可以留言的0.0
好久没更新咯,最近准备大量更新数据结构的题目