第一章 实验目的
1.掌握线性表的顺序存储结构的表示和实现方法。
2.掌握顺序表基本操作的算法实现。
3.了解顺序表的应用。
第二章 实验环境
硬件环境要求:
PC机(单机)
使用的软件名称、版本号以及模块:
DEV C++、VS2010等。
第三章 实验内容
编写一个程序,实现顺序表的各种基本运算(假设顺序表的元素类型为char),并在此基础上设计一个主程序完成如下功能:
(1)初始化顺序表L;
(2)依次采用尾插法插入a、b、c、d、e元素;
(3)输出顺序表L;
(4)输出顺序表L的长度;
(5)判断顺序表L是否为空;
(6)输出顺序表L的第3个元素;
(7)输出元素a的位置
(8)在第4个元素位置上插入f元素
(9)输出顺序表L;
(10)删除L的第3个元素;
(11)输出顺序表L;
(12)释放顺序表L。
第四章 实验步骤
#include<stdio.h>
#include <stdio.h>
#include <stdlib.h>
#define M 10
typedef char datatype;
typedef struct
{
datatype data[M];
int len;
}SeqList;
SeqList *init_SeqList() //初始化顺序表
{
SeqList *L;
L=(SeqList*)malloc(sizeof(SeqList));
L->len=0;
return L;
}
void Free(SeqList *L) //删除线性表
{
free(L);
printf("Have free!");
}
int Listempty(SeqList *L) //判断线性表是否为空
{
return (L->len==0);
}
int Listlen(SeqList *L) //输出顺序表长度
{
return (L->len);
}
int Getelem(SeqList *L,int i,datatype &x) //求线性表中按位置查找某个元素的值
{
if (i<1 || i>L->len)
{
printf("Place is wrong!\n");
return 0;
}
x = L->data[i-1];
}
int Locateelem(SeqList *L, datatype x) //按元素值查找
{
int i = 0; //从头开始查找
while (i<L->len && L->data[i]!=x)
i++;
if (i>L->len)
{
printf("Not Found!\n");
return 0;
}
else
return i+1;
}
int Insertlist(SeqList *L,int i,datatype x) //顺序表插入元素
{
int j;
if(L->len==M-1)
{
printf("full!\n");
return -1;
}
if(i<1||i>(L->len+1))
{
printf("place is wrong!\n");
return 0;
}
for (j=L->len;j>=i;j--)
L->data[j+1]=L->data[j];
L->data[i]=x;
L->len++;
printf("在%d位置已插入%c\n",i,x);
}
int Listdelete(SeqList *L,int i,datatype &x) //按照位置删除数据元素
{
int j;
if(i<1 || i>L->len)
{
printf("Place is wrong!\n");
return 0;
}
i--;
x = L->data[i];
for(j=i;j<L->len;j++)
L->data[j] = L->data[j+1];
L->len--;
printf("Have deletad!\n");
}
int output(SeqList *L) //输出顺序表
{
int i;
if (Listempty(L))
{
printf("empty!\n");
return 0;
}
for(i=0;i<=L->len;i++)
printf("%c ",L->data[i]);
printf("\n");
}
int main() //主函数
{
SeqList *L;
datatype x;
int i;
printf("(1)初始化顺序表L\n");
L=init_SeqList();
printf("(2)依次采用尾插法插入a b c d e元素\n");
Insertlist(L,1,'a');
Insertlist(L,1,'b');
Insertlist(L,1,'c');
Insertlist(L,1,'d');
Insertlist(L,1,'e');
printf("(3)输出顺序表\n");
output(L);
printf("(4)顺序表长度 = %d\n",Listlen(L));
printf("(5)判断顺序表是否为空: ");
if (Listempty(L))
printf("空\n");
else
printf("非空\n");
Getelem(L,3,x);
printf("(6)顺序表第3个元素是 = %c\n",x);
printf("(7)元素a的位置是 = %d\n",Locateelem(L,'a'));
printf("(8)在第4位置上插入f元素\n");
Insertlist(L,4,'f');
printf("(9)输出顺序表L;\n");
output(L);
printf("(10)删除L的第3个元素\n");
Listdelete(L,3,x);
printf("(11)输出顺序表L:\n");
output(L);
printf("(12)释放顺序表L\n");
Free(L);
return 0;
}
第五章实验要求
1、用DEV C++、VS2010等工具创建文件或程序,输入代码后,进行编译运行或在控制台执行。
2、观看程序运行结果,并根据结果进行思考,对程序进行修改和总结。
实验结果:
这个程序大概有140多行,实际上就是由许多功能函数组成起来的。在编写过程中,重要的是函数之间的调用过程和数据之间的来回调用容易混淆。
再者容易出错的地方就是逻辑编号与L->len之间的加加减减。比如说删除第3个元素。逻辑编号为2,L->len减一。
最后,什么是尾插法和头插法不是很理解。耗时较长。