顺序表——数据结构实验课源代码,菜鸡的第一篇博客,大一新生,代码参考课本严蔚敏 吴伟民——数据结构(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>))。

但是基本操作肯定是可以的。

   主函数写的比较简单,主要是不知道要写什么。

   多写这样的代码有助于理解线性表的作用。

多谢观看,请大家多多指教!

猜你喜欢

转载自blog.csdn.net/hghhgghhg/article/details/80223738