您的位置:首页 > 理论基础 > 数据结构算法

顺序表——数据结构实验课源代码,菜鸡的第一篇博客,大一新生,代码参考课本严蔚敏 吴伟民——数据结构(C语言版)

2018-05-07 12:06 246 查看

一、实验目的 了解掌握顺序线性表的基本功能并实现。

 

二、实验内容及实现过程步骤

 

顺序线性表源代码及实现:

 #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>))。

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

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

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

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐