Bootstrap

数据结构与算法实验一——顺序表操作实验报告

第一章 实验目的

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减一。
最后,什么是尾插法和头插法不是很理解。耗时较长。

;