实现顺序表的各种基本运算

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实现顺序表的各种基本运算

一、实验目的

了解顺序表的结构特点及有关概念,掌握顺序表的各种基本操作算法思想及其实现。

二、实验内容

编写一个程序,实现顺序表的各种基本运算:

1、初始化顺序表;

2、顺序表的插入;

3、顺序表的输出;

4、求顺序表的长度

5、判断顺序表是否为空;

6、输出顺序表的第i位置的个元素;

7、在顺序表中查找一个给定元素在表中的位置;

8、顺序表的删除;9、释放顺序表

三、算法思想与算法描述简图

四、实验步骤与算法实现

#include<>

#include<>

#define MaxSize 50

typedef char ElemType;

typedef struct

{ElemType data[MaxSize];

int length;

}SqList;//顺序表类型的定义

void InitList(SqList*&L)//初始化顺序表L

{L=(SqList*)malloc(sizeof(SqList));

L->length=0;

}

void DestroyList(SqList*&L)//释放顺序表L

{free(L);

}

int ListEmpty(SqList*L)//判断顺序表L是否为空集{return(L->length==0);

}

int Listlength(SqList*L)//返回顺序表L的元素个数{return(L->length);

}

void DispList(SqList*L)//输出顺序表L

{int i;

if(ListEmpty(L))return;

for(i=0;ilength;i++)

printf("%c",L->data[i]);

printf("\n");

}

int GetElem(SqList*L,int i,ElemType e)/*获取顺序表L中的第i个元素*/

{if(i<1||i>L->length)//查找是否有这个i,若没有返回0

return 0;

e=L->data[i-1];

return 1;

}

int LocateEmpty(SqList*L,ElemType e)/*在顺序表L中查找元素e*/

{int i=0;

while (ilength&&L->data[i]!=e)

i++;

if(i>=L->length)

return 0;

else

return i+1;

}

int ListInsert(SqList*&L,int i,ElemType e)/*在顺序表中第i个位置上插入元素e*/ {int j;

if(i<1||i>L->length+1)

return 0;

i--;//将顺序表位序转化为data下标

for(j=L->length;j>i;j--)//将data[i]及后面元素后移一个位置

L->data[j]=L->data[j-1];

L->data[i]=e;

L->length++;//顺序表度增1

return 1;

}

int ListDelete(SqList*&L,int i,ElemType e)/*在顺序表L中删除第i个元素*/

{int j;

if(i<1||i>L->length)

return 0;

i--;//将顺序表位序转化为data下标

e=L->data[i];

for(j=i;jlength-1;j++)

L->data[j]=L->data[j+1];

L->length--;

return 1;

}

void main()

{SqList*L;

ElemType e;

printf("(1)初始化顺序表L\n");

InitList(L);//初始化

printf("(2)依次采用尾插法插入7,9,12,13,14,15,18\n"); ListInsert(L,1,'7');

ListInsert(L,2,'9');

ListInsert(L,3,'12');

ListInsert(L,4,'13');

ListInsert(L,5,'14');

ListInsert(L,6,'15');

ListInsert(L,7,'18');

printf("(3)输出顺序表L:");

DispList(L);

printf("(4)顺序表L长度=%d\n",Listlength(L));

printf("(5)顺序表L为%s\n",(Listlength(L)?"空":"非空")); GetElem(L,3,12);

printf("(6)顺序表第3个元素=%d\n",12);

printf("(7)元素a的位置=%d\n",LocateEmpty(L,'a'));

printf("(8)在第4个数位置上插入8元素\n");

ListInsert(L,4,'8');

printf("(9)输出顺序表L:");

DispList(L);

printf("(10)删除L的第3个元素\n");

ListDelete(L,3,e);

printf("(11)输出顺序表L:");

DispList(L);

printf("(12)释放顺序表L\n");

DestroyList(L);

}

五、实验测试及结果

六、思考题

按由表头至表尾和表尾至表头的次序输入数据元素,则顺序表建立的程序设计有何区别?

解答:若是按表头至表尾次序输入,则存放的元素与顺序表中位置一一对应,而表尾至表头输入则相反。输出时,也相反!

相关文档
最新文档