顺序表——数据结构实验课源代码,菜鸡的第一篇博客,大一新生,代码参考课本严蔚敏 吴伟民——数据结构(C语言版)
一、实验目的
了解掌握顺序线性表的基本功能并实现。
二、实验内容及实现过程步骤
顺序线性表源代码及实现:
#include<iostream>
#include<malloc.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct{
int *elem;
int length;
int listsize;
}List;
using namespace std;
void InitList_list(List &L);//构造一个空的线性表L.
void Clear_list(List &L);//清空原始表
int Locate_list(List &L,int e);//查找元素的位置 ,返回第一个与该值相同的元素位置
void Traverse_list(List &L);//遍历线性表中的元素,若遍历记录类型,则需要插入操作符
void buffersort_list(List &L);//排序,从小到大
int Length_list(List &L);//计算线性表长度
bool Insert_list(List &L,int i,int e);//插入元素
bool Delete_list(List &L,int i); //删除指定元素
函数模块区:以下是对上述功能函数的实现代码
void InitList_list(List &L)
{
L.elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));
if(!L.elem)
{
cout<<"动态非配失败"<<endl;
exit(1);
}
L.length=0;
L.listsize=LIST_INIT_SIZE;
}
void Clear_list(List &L)//清空原始表
{
if(L.elem)
{
delete []L.elem;
L.elem=NULL;
}
L.length=0;
L.listsize=0;
}
int Locate_list(List &L,int e)//查找元素的位置 ,返回第一个与该值相同的元素位置
{
for(int i=0;i<L.length;i++)
{
if(L.elem[i]==e)
{
cout<<"您所查找元素的位置序号为: "<<i+1<<endl;
return i+1;
}
}
return -1;
}
void Traverse_list(List &L)//遍历线性表中的元素,若遍历记录类型,则需要插入操作符
{
for(int i=0;i<L.length;i++)
{
if(i!=(L.length-1))
cout<<L.elem[i]<<" ";
else
cout<<L.elem[i]<<endl;
}
}
void buffersort_list(List &L)//排序,从小到大
{
for(int i=0;i<L.length-1;i++)
{
for(int j=i+1;j<L.length;j++)
{
if(L.elem[i]>L.elem[j])
{
int temp=L.elem[i];
L.elem[i]=L.elem[j];
L.elem[j]=temp;
}
}
}
}
int Length_list(List &L)//计算线性表长度
{
return L.length;
}
bool Insert_list(List &L,int i,int e)//在指定位置插入元素
{
if(i<1||i>L.length+1)
cout<<"i值无效"<<endl;
if(L.length==L.listsize)
{
cout<<"当前存储空间已满"<<endl;
int k=sizeof(int);
L.elem=(int *)realloc(L.elem,(L.listsize+LISTINCREMENT)*k);
if(!L.elem)
{
cout<<"动态分配失败"<<endl;
exit(1);
}
L.listsize=L.listsize+LISTINCREMENT;
}
for(int j=L.length-1;j>=i-1;j--)
{
L.elem[j+1]=L.elem[j];
}
L.elem[i-1]=e;
L.length++;
return true;
}
bool Delete_list(List &L,int i) //删除指定元素
{
if(L.length==0)
{
cout<<"线性表为空"<<endl;
return false;
}
if(i<1 ||i>L.length)
{
cout<<"输入i值无效"<<endl;
return false;
}
int e=L.elem[i-1];
for(int j=i;j<L.length;j++)
{
L.elem[j-1]=L.elem[j];
}
L.length--;
return true;
}
主函数区:以下是我对各个函数的调试,不必完全一样。
int main()
{
int a[15]={-1};
int i;
cout<<"请输入线性表的10个正整数:"<<endl;
for(int i=0;i<10;i++)
{
cin>>a[i];
}
cout<<endl;
List list;
InitList_list(list);
for(i=0;i<10;i++)
{
Insert_list(list,i+1,a[i]);
}
cout<<"遍历新插入的线性表的元素:"<<endl;
Traverse_list(list);
Locate_list(list,list.length);
cout<<"该线性表的长度为: "<<Length_list(list)<<endl;
buffersort_list(list);
cout<<"对该线性表进行升序排列为:"<<endl;
Traverse_list(list);
cout<<"请输入您想要删除的元素: " <<endl;
int Delete_elem;
cin>>Delete_elem;
int locate=Locate_list(list,Delete_elem);
Delete_list(list,locate);
cout<<"删除后的线性表为:"<<endl;
Traverse_list(list);
system("PAUSE");
return 0;
}
三、实验小结
(通过实验得出的结论;对信息系统与信号处理相关理论知识的加深理解等)
自己写的一个源代码(参考数据结构C语言版),将伪代码改成源代码,可能会有一些问题。个人觉得比较简陋,有一些地方不够严谨(如:排序太low,可以写成sort(<algorithm>))。
但是基本操作肯定是可以的。
主函数写的比较简单,主要是不知道要写什么。
多写这样的代码有助于理解线性表的作用。
多谢观看,请大家多多指教!