顺序表——数据结构实验课源代码,菜鸡的第一篇博客,大一新生,代码参考课本严蔚敏 吴伟民——数据结构(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>))。
但是基本操作肯定是可以的。
主函数写的比较简单,主要是不知道要写什么。
多写这样的代码有助于理解线性表的作用。
多谢观看,请大家多多指教!
- 5-2-三元组顺序表(稀疏矩阵)-数组和广义表-第5章-《数据结构》课本源码-严蔚敏吴伟民版
- 5-3-行逻辑链接的顺序表(稀疏矩阵)-数组和广义表-第5章-《数据结构》课本源码-严蔚敏吴伟民版
- 12-1-顺序文件归并-文件-第12章-《数据结构》课本源码-严蔚敏吴伟民版
- 9-1-顺序查找-查找-第9章-《数据结构》课本源码-严蔚敏吴伟民版
- 数据结构之顺序表(部分参考C博客—文逗,整理和参考严蔚敏版数据结构)
- 10-0-顺序表存储结构-内部排序-第10章-《数据结构》课本源码-严蔚敏吴伟民版
- 2-3-归并单链表(顺序表)-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版
- 2-3-归并单链表(顺序表)-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版
- 10-2-折半插入排序-内部排序-第10章-《数据结构》课本源码-严蔚敏吴伟民版
- 10-11-基数排序-内部排序-第10章-《数据结构》课本源码-严蔚敏吴伟民版
- 2-2-求并集A=A∪B-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版
- 8-2-伙伴系统-动态存储管理-第8章-《数据结构》课本源码-严蔚敏吴伟民版
- 2-4-单链表链式存储结构-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版
- 3-3-行编辑程序-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版
- 10-6-起泡排序-内部排序-第10章-《数据结构》课本源码-严蔚敏吴伟民版
- 6-11-N皇后问题-树和二叉树-第6章-《数据结构》课本源码-严蔚敏吴伟民版
- 2-10-归并扩展的线性单链表-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版
- 3-1-栈的顺序存储结构-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版
- 《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明
- 2-5-归并链式存储的单链表-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版