顺序表的基本操作
顺序表的基本操作
采用的数据描述为:顺序表在C语言中用一维数组表示。
(1)定义线性表
#define MAXLEN 50/*线性表的最大长度*/
typedef struct{int elem[MAXLEN];/*顺序表中存放元素的数组*/
int last;/*顺序表的长度,即元素个数*/
}Sqlisttp;
3.对顺序表进行元素的删除操作
三、实验步骤:
1)输入一个顺序表,并输出,验证输入的内容与输出的内容是否一致。
2)实现顺序表的插入操作(在第I个元素之前插入一个元素,即将线性表中从第I个元素开始的所有元素依次后移一个位置,以便腾空一个位置,再把新元素插入到该位置)。
3)实现顺序表的删除操作(删除第I个元素,即把第I个元素之后的所有元素前移一个位置)。
st--;}/*顺序表V的长度减1*/
return V;}
(4)顺序表元素输出函数
void display(Sqlisttp V)
{ int j;
for(j=0;j<=st-1;j++) printf("%d ",V.elem[j]);
printf("\n"); }
(5)主函数
main()
return V;}
(3)在顺序表V中删除第i个元素
Sqlisttp delete(Sqlisttp V,int i)
{int j;
if(i<1||i>st) printf("ERROR!");/*删除位置不正确则出错*/
else { for(j=i;j<=st-1;j++)
V.elem[j-1]=V.elem[j];/*将第i+1个元素及后继元素位置向前移一位*/
java顺序表的基本操作代码
java顺序表的基本操作代码Java顺序表是一种基于数组实现的线性结构,具有随机访问、元素插入和删除等基本操作。
在Java中,我们可以通过定义一个数组来创建一个顺序表,并通过编写一些基本操作代码来实现对该顺序表的操作。
一、顺序表的定义和初始化在Java中,我们可以通过定义一个数组来创建一个顺序表。
下面是一个简单的代码示例:```public class SeqList<T> {private Object[] elementData; // 存储元素的数组private int size; // 当前元素个数// 构造函数public SeqList(int capacity) {elementData = new Object[capacity];size = 0;}}```在上述代码中,我们定义了一个SeqList类,其中包含了存储元素的数组elementData和当前元素个数size两个成员变量。
构造函数SeqList(int capacity)用于创建指定长度为capacity的数组,并将当前元素个数初始化为0。
二、顺序表的插入操作1. 在指定位置插入元素在Java中,我们可以通过下标来访问数组中的元素。
因此,在进行插入操作时,需要先将要插入位置之后的所有元素向后移动一位,然后再将新元素插入到指定位置上。
下面是一个简单的代码示例:```// 在指定位置插入元素public void insert(int index, T element) {if (index < 0 || index > size) {throw new IndexOutOfBoundsException("插入位置越界"); }// 判断数组是否已满,若已满则扩容if (size == elementData.length) {ensureCapacity(size * 2);}// 将要插入位置之后的所有元素向后移动一位for (int i = size - 1; i >= index; i--) {elementData[i + 1] = elementData[i];}// 插入新元素elementData[index] = element;size++;}// 扩容方法private void ensureCapacity(int minCapacity) {if (minCapacity > elementData.length) {Object[] newArray = new Object[minCapacity];System.arraycopy(elementData, 0, newArray, 0, size);elementData = newArray;}}```在上述代码中,我们首先判断要插入的位置是否越界。
顺序表的基本操作--实验报告
实验报告附:源程序:#include<stdio.h>#define Maxsize 100#define error 0#define ok 1typedef struct{int elem[Maxsize];int last;}SeqList;int InsList(SeqList *L,int a,int i); int Locate(SeqList L,int e);int Del(SeqList *L,int i);void main(){int i,e,a;int list1,list2;SeqList L;st=0;for(i=0;i<100;i++){printf("请输入顺序表元素\n");scanf("%d",&L.elem[i]);if(L.elem[i]==-1)break;st++;}if(L.elem[st]==-1)st--;printf("要插入的元素,位置为\n"); scanf("%d,%d",&a,&i);list1=InsList(&L,a,i);if(list1){printf("插入后的顺序表为:\n");for(i=0;i<=st;i++)printf("%d",L.elem[i]);printf("\n");}elseprintf("插入失败!");printf("要查找的元素为\n");scanf("%d",&e);list2=Locate(L,e);if(!list2)printf("该元素不存在\n");elseprintf("该元素所在位置的序号为:%d\n",list2);/*删除元素*/printf("是否要删除该元素?<是请输入1 ,否请输入0 >\n");int m;scanf("%d",&m);if(m){Del(&L,list2);printf("删除后的顺序表为:\n");for(i=0;i<=st;i++)printf("%d",L.elem[i]);printf("\n");}else printf("未删除元素%d\n",e);}int InsList(SeqList *L,int a,int i)//i位置,下标i-1{int p;if(L->last>=Maxsize-1){printf("表已满,无法插入");return(error);}for(p=L->last;p>=i-1;p--)L->elem[p+1]=L->elem[p];L->elem[i-1]=a;L->last++;return(ok);}int Locate(SeqList L,int e){int i=0;while((i<=st)&&(L.elem[i]!=e)) i++;if (i<=st)return(i+1);else return(error);}int Del(SeqList *L,int i){int k;for(k=i;k<=L->last;k++)L->elem[k-1]=L->elem[k];L->last--;return ok;}。
顺序表的基本操作实验报告
湖南第一师范学院信息科学与工程系实验报告课程名称:数据结构与算法成绩评定:实验项目名称:顺序表的基本操作指导教师:王杰文学生姓名:沈丽桃学号:10403080118 专业班级:教育技术实验项目类型:验证性实验地点:科B305 实验时间: 2011年 10月8 日一、实验目的与要求:实验目的:实现顺序表的创建、查找、插入、删除与输出基本原理:顺序表的基本操作二、实验环境:(硬件环境、软件环境)1.硬件环境:奔ⅣPC。
2.软件环境:Windows XP 操作系统,TC2.0或VC++。
三、实验内容:(原理、操作步骤、程序代码等)#include<stdio.h># define maxlength 100 /#后不应该有空格/struct LIST{int elements[maxlength];int last;}L;typedef int position;void main(){position p,p1; /p和x最好赋值/int x,x1,i,choice;position Locate(int x,struct LIST*y);void Insert(int x,position p,struct LIST*y);void Delete(position p,struct LIST *y);printf("option:Locate 1,Insert 2,Delete 3\n");printf("please choice:");scanf("%d",&choice);switch(choice){case 1:{printf("please input a number:");scanf("%d",&x);p1=Locate(x,&L);if(p1==101)printf(“the number does not exist”);else printf("the position is:%d",p1); /break;/}case 2:{printf("please input a numer:");scanf("%d",x1); /x1钱应加取地址符&/printf("please input the position:");scanf("%d",&p);Insert(x1,p,&L);for(i=0;i<=st;i++)printf("%d",L.elements[i]);printf("\n"); /break;/}case 3:{printf("please input the position:");scanf("%d",&p);Delete(p,&L);for(i=0;i<=st;i++)printf("%d",L.elements[i]);printf("\n"); /break;/}}position Locate(int x,struct LIST*y) /把变量x改为m/{int q;if(st>maxlength-1)printf("error:list is full");else if((p>st)||(p<1))printf("error:position does not exist");else{for(q=1;q<st;q++){if(elements[q]==x) /x改为m/(主要错误是elements[q]应改为L.elements[q] return q;else return 101;}}}void Insert(int x,position p,struct LIST*y){position q;if(st>maxlength-1)printf("error:list is full");else if((p>st)||(p<1))printf("error:position does not exist");else{for(q=st;q>=p;q--){L.elements[q+1]=L.elements[q];st=st+1;L.elements[q]=x;}}}Void Delete(position p,struct LIST*y) /这个问题重复出现,V要改为小写/ {position q;if(st>maxlength-1)printf("error:list is full");else if((p>st)||(p<1))printf("error:position does not exist");else{st=st-1;for(q=p;q<=st;q++)L.elements[q]=L.elements[q+1];}}error C2146:syntax error:missing’)’before identifier’p’error C2081:’position’:name in formal parameter list illegalerror C2146:syntax error:missing’:’before identifier’p’error C2059:syntax error:’type’error C2059:syntax error:’)’error C2143:syntax error:missing’;’before’type’warning C4020:’Insert’:too many actual parameterswarning C4013:’delete’undefined;assuming extern returning interror C2065:’position’:undeclared identifiererror C2146:syntax error:missing’)’before identifier ‘Locate’error C2143:syntax error:missing’)’before ‘type’error C2198:’Locate’:too few avtual parameterserror C2059:syntax error:’)’error C2065:’q’:undeclared identifiererror C2065:’elements’:undeclared identifiererror C2109:subscript requires array or pointer typewarning C4098:’main’:’void’function returning a valuewarning C4098:’main’:’void’function returning a valueerror C2146:syntax error:missing’);before identifier ’p’error C2081:’position’:name in formal parameter list illegalerror C2061:syntax error:identifier’p’error C2059:syntax error:’;’error C2059:syntax error:’,’error C2059:syntax error :’)’四、实验体会# define maxlength 100 /#后不应该有空格/要先对数组进行初始化,存入一些数据position p,p1; /p和x最好赋值/scanf("%d",x1); /x1钱应加取地址符&/if(elements[q]==x) /x改为m/(主要错误是elements[q]应改为L.elements[q]Void Delete(position p,struct LIST*y) /这个问题重复出现,V要改为小写/switch每个case语句写完要加break;一开始不知所措,首先应该有一个大的方向,把主程序编号,再逐步求精,落实到每一个函数的编写。
数据结构中顺序表的基本操作
数据结构中顺序表的基本操作
顺序表是一种线性表的存储结构,使用一组连续的存储单元来存储元素,其基本操作包括:
1. 初始化:创建一个空顺序表,设置其长度为0。
2. 插入元素:在顺序表的指定位置插入一个元素,需要将插入位置之后的元素依次向后移动,然后将新元素放入插入位置,并更新顺序表的长度。
3. 删除元素:删除顺序表中的指定位置的元素,需要将删除位置之后的元素依次向前移动,然后更新顺序表的长度。
4. 查找元素:根据元素的值,查找顺序表中第一个与该值相等的元素,并返回其位置。
如果不存在,则返回-1。
5. 获取元素:根据位置,返回顺序表中指定位置的元素。
6. 修改元素:根据位置,修改顺序表中指定位置的元素。
7. 清空顺序表:将顺序表的长度设置为0,即清空元素。
这些基本操作可以根据具体需求进行使用和扩展。
顺序表的建立与基本算法
顺序表的建立与基本算法
顺序表是一种非常重要的数据结构,它的基本算法包括分配、搜索、插入和删除操作。
首先,在建立顺序表之前,必须确定表的存储空间大小,一般情况下,可以申请一个等容量的存储空间,这样表格中的元素可以按照其逻辑关系依次放置,然后把表格所占据的空间当做顺序表,也可以开辟一个足够大的存储空间而不用一次性申请,当存储空间不足时,可以再次申请分配新的存储空间。
其次,顺序表的搜索操作可以采用顺序搜索和二分搜索两种方法进行,顺序搜索的算法从表的第一个元素开始,依次比较元素的值是否匹配,若匹配,就可以找到目标;而二分搜索把顺序表看做一个有序表,先把中间位置的元素和目标元素比较,比目标元素小则在前半部分查找,大则在后半部分查找;如果中间元素就是目标,则搜索结束。
第三,顺序表的插入操作一般分为有序表的插入和无序表的插入两种,有序表的插入是在表中先找到比新元素大的元素,然后把新元素插入到该位置前面;而无序表的插入是先找到一个空的存储空间,然后将目标元素插入。
最后,顺序表的删除操作也可以分为有序表的删除和无序表的删除两种,有序表的删除是先搜索目标元素,然后把后一个元素覆盖前一个元素,再删除最后一个元素;而无序表的删除是直接将目标元素清除,然后用最后一个元素覆盖清除空间。
总之,顺序表的建立和基本算法,包括:分配、搜索、插入和删除操作,这些操作均可以在顺序表的存储空间中进行,并利用适当的算法实现目标操作,使得顺序表能够高效地完成计算任务,因此,对顺序表的建立和基本算法的理解是一项必备的技能。
数位顺序表简单知识点
数位顺序表简单知识点数位顺序表是计算机中常用的数据结构之一,用于存储和操作数字。
它按照数位的顺序将数字分解为各个数位,以便进行相应的操作和计算。
本文将介绍数位顺序表的基本概念、应用场景以及相关的操作和算法。
一、数位顺序表的定义和结构数位顺序表是一种线性表,它由一个个数位元素组成,每个数位元素都包含一个数字和一个指针,用来指向下一个数位元素。
数位顺序表的头指针指向第一个数位元素,尾指针指向最后一个数位元素,以便快速定位和操作。
二、数位顺序表的应用场景数位顺序表主要用于处理数字的各个数位,常见的应用场景包括:1. 数字运算:数位顺序表可以方便地进行数字加减乘除、取模和取余等运算,特别适用于大整数的计算。
2. 数字转换:数位顺序表可以将一个数字转换为字符串或字符数组,以便于输出和处理。
3. 数字统计:数位顺序表可以统计一个数字中各个数位的出现次数,或者判断一个数字是否存在重复的数位。
4. 数字排序:数位顺序表可以对一组数字进行排序,根据各个数位的大小进行比较和交换。
三、数位顺序表的基本操作1. 初始化:创建一个空的数位顺序表,并初始化头指针和尾指针。
2. 插入元素:在数位顺序表的尾部插入一个新的数位元素,更新尾指针。
3. 删除元素:删除数位顺序表的尾部元素,更新尾指针。
4. 查找元素:根据指定的位置,查找并返回对应的数位元素。
5. 修改元素:根据指定的位置,修改对应的数位元素的值。
6. 遍历元素:按照顺序依次访问数位顺序表中的每个数位元素。
四、数位顺序表的常用算法1. 数位求和:将两个数位顺序表相同位置的数位元素相加,得到一个新的数位顺序表。
2. 数位比较:比较两个数位顺序表的大小,根据数位元素的大小关系进行比较。
3. 数位排序:将一个数位顺序表中的数位元素按照大小进行排序,可以使用冒泡排序、插入排序或快速排序等算法。
五、数位顺序表的优缺点1. 优点:数位顺序表可以高效地处理数字的各个数位,适用于大整数的计算和处理,具有较高的灵活性和准确性。
数据结构编程实现顺序表的基本操作
数据结构编程实现顺序表的基本操作顺序表是一种基础的数据结构,它是线性表的一种实现方式,它采用连续存储结构来存储线性表的元素。
顺序表中的数据元素存储往往是数值型,它通常用于存储数组和队列等数据结构。
今天我们来学习顺序表的基本操作及其编程实现。
第一步:定义顺序表在编写顺序表的基本操作之前,我们需要先定义一个顺序表的数据结构。
这里我们可以使用结构体来定义一个顺序表的数据类型:```typedef struct {int *data; // 存储空间的基地址int length; // 顺序表的长度int max_size; // 顺序表可存储的最大元素个数} SeqList;```以上定义了一个SeqList结构体类型,包含三个成员:data表示存储空间的基地址,length表示顺序表的元素个数,max_size表示顺序表可存储的最大元素个数。
其中,data采用动态分配内存的方式,可以根据实际需要动态调整顺序表的大小,max_size则是由用户在创建顺序表时指定的。
第二步:实现顺序表的基本操作顺序表的基本操作包括初始化、插入、删除、查找、获取元素等。
下面分别介绍这些操作的实现方法。
1. 初始化操作初始化操作用于创建一个空的顺序表。
它的实现方法如下:```SeqList* init_seq_list(int max_size) {SeqList *list = (SeqList*)malloc(sizeof(SeqList)); // 申请存储空间if (!list) { // 内存申请失败printf("Error: Out of memory!\n");return NULL;}list->data = (int*)malloc(sizeof(int) * max_size); // 申请存储数据的空间if (!list->data) { // 内存申请失败printf("Error: Out of memory!\n");free(list); // 释放存储空间return NULL;}list->length = 0; // 空表长度为0list->max_size = max_size; // 顺序表可存储的最大元素个数 return list; // 返回顺序表指针}```在初始化过程中,我们先申请存储空间,然后再申请存储数据的空间,最后将顺序表的长度设为0,顺序表可存储的最大元素个数设为max_size,返回顺序表的指针。
顺序表的基本操作
《数据结构》实验报告一顺序表的基本操作班级:网络工程学号:12015242183实验日期:2016.9.25姓名:邓宗永程序文件名及说明:sequenlist 顺序表一、实验目的1、掌握使用Turbo C3.0 上机调试线性表的基本方法;2、掌握顺序表的基本操作:插入、删除、查找以及线性表合并等运算。
二、实验要求1、认真阅读和掌握实验的程序。
2、上机运行程序。
3、保存和打印出程序的运行结果,并结合程序进行分析。
4、按照你对线性表的操作需要,编写写主程序并运行,打印出文件清单和运行结果三、注意事项:在磁盘上创建一个目录,专门用于存储数据结构实验的程序。
四、实验内容1. 顺序表的查找、插入与删除。
设计算法,实现线性结构上的顺序表的产生以及元素的查找、插入与删除。
具体实现要求:(1)从键盘输入10 个整数,产生顺序表,并输入结点值。
(2)从键盘输入 1 个整数,在顺序表中查找该结点的位置。
若找到,输出结点的位置;若找不到,则显示“找不到”。
(3)从键盘输入 2 个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x 插入在对应位置上,输出顺序表所有结点值,观察输出结果。
(4)从键盘输入 1 个整数,表示欲删除结点的位置,输出顺序表所有结点值,观察输出结果。
五、实验报告必须写明内容1. 程序设计的基本思想,原理和算法描述:(包括程序的结构,数据结构,输入/输出设计,符号名说明等)程序的结构:通过子函数实现输出,删除,插入,查找等功能,高耦合低内聚数据结构:线性结构,顺序储存输入/ 输出设计:根据屏幕提示,从键盘读取数据2. 源程序及注释:#include <stdio.h>#include <stdio.h>typedef int datatype;#define maxsize 10typedef struct // 创建一个顺序表包含10 个整数{datatype data[maxsize];int last;}sequenlist;void Delete(sequenlist *L,int i)// 删除前移节点{int j;if((i<1)||(i>L->last+1)){printf("error");}else{for(j=i;j<=L->last;j++)L->data[j-1]=L->data[j];L->last--;}}int get(sequenlist L,datatype x){ int i=0;for(i=0;i<=st;i++){if(L.data[i]==x){return i+1; break;}}return 0;}int Insert (sequenlist *L,datatype x,int i) {int j;if((L->last)>=maxsize-1){printf("overflow\n");return 0;}else{for(j=L->last;j>=i-1;j--)L->data[j+1]=L->data[j];L->data[i-1]=x;L->last=L->last+1;}return(1);}void PPrint(sequenlist L)// 输出{int i;printf("the list is \n:");for(i=0;i<= st;i++){printf("%d ",L.data[i]);}printf("\n");}int main(void){sequenlist L;datatype t,th,mh,wh,eh;int i,s;printf(" 请输入十个整数:\n");for(i=0 ;i<maxsize;i++)。
实验一顺序表的基本操作实验报告
元素之后的所有数据都前移一个位置,最将线性表长减1。
3.顺序表查找操作的基本步骤:要在顺序表中查找一个给定值的数据元素则可以采用顺序查找的方法,从表中第 1 个数据元素开始依次将值与给定值进行比较,若相等则返回该数据元素在顺序表中的位置,否则返回0 值。
线性表的动态分配顺序存储结构—C语言实现#define MaxSize 50//存储空间的分配量Typedef char ElemType;Typedef struct{ElemType data[MaxSize];int length; //表长度(表中有多少个元素)}SqList;动态创建一个空顺序表的算法:void InitList(SqList *&L) //初始化线性表{L=(SqList *)malloc(sizeof(SqList)); //分配存放线性表的空间L->length=0; //置空线性表长度为0}线性表的插入:status Sqlist_insert(Sqlist &L,int i,Elemtype x)/*在顺序表L中第i个元素前插入新元素x*/{ if (i<1||i>L.length+1) return ERROR; /*插入位置不正确则出错*/if (L.length>=MAXLEN)return OVERFLOW;/*顺序表L中已放满元素,再做插入操作则溢出*/for(j=L.length-1;j>=i-1;j--)L.elem[j+1]=L.elem[j]; /*将第i个元素及后续元素位置向后移一位*/L.elem[i-1]=x; /*在第i个元素位置处插入新元素x*/L.length++; /*顺序表L的长度加1*/return OK;}线性表的删除:status Sqlist_delete(Sqlist &L,int i,Elemtype &e)/*在顺序表L中删除第i个元素*{ if (i<1||i>L.length) return ERROR; /*删除位置不正确则出错*/for(j=i;j<=L.length-1;j++)L.elem[j-1]=L.elem[j]; /*将第i+1个元素及后继元素位置向前移一位*/L.length--;/*顺序表L的长度减1*/return OK;}线性表元素的查找:int LocateElem(SqList *L, ElemType e) //按元素值查找{int i=0;while (i<L->length && L->data[i]!=e)i++; //查找元素eif (i>=L->length) //未找到时返回0return 0;elsereturn i+1; //找到后返回其逻辑序号}输出线性表:void DispList(SqList *L) //输出线性表{int i;if (ListEmpty(L)) return;for (i=0;i<L->length;i++)printf("%c ",L->data[i]);printf("\n");}输出线性表第i个元素的值:bool GetElem(SqList *L,int i,ElemType &e)//求线性表中某个数据元素值{if (i<1 || i>L->length)return false; //参数错误时返回falsee=L->data[i-1]; //取元素值return true; //成功找到元素时返回true}代码:#include <stdio.h>#include <malloc.h>#define MaxSize 50typedef char ElemType;typedef struct{ElemType data[MaxSize];int length;} SqList;void InitList(SqList *&L);void DestroyList(SqList *L);bool ListEmpty(SqList *L);int ListLength(SqList *L);void DispList(SqList *L);bool GetElem(SqList *L,int i,ElemType &e);int LocateElem(SqList *L, ElemType e);bool ListInsert(SqList *&L,int i,ElemType e);bool ListDelete(SqList *&L,int i,ElemType &e);void InitList(SqList *&L)//初始化线性表{L=(SqList *)malloc(sizeof(SqList));//分配存放线性表的空间L->length=0;//置空线性表长度为0 }void DestroyList(SqList *L)//销毁线性表{free(L);}bool ListEmpty(SqList *L)//判线性表是否为空表{return(L->length==0);}int ListLength(SqList *L)//求线性表的长度{return(L->length);}void DispList(SqList *L)//输出线性表{int i;if (ListEmpty(L)) return;for (i=0;i<L->length;i++)printf("%c ",L->data[i]);printf("\n");}bool GetElem(SqList *L,int i,ElemType &e)//求线性表中某个数据元素值{if (i<1 || i>L->length)return false;//参数错误时返回falsee=L->data[i-1];//取元素值return true;//成功找到元素时返回true}int LocateElem(SqList *L, ElemType e)//按元素值查找{int i=0;while (i<L->length && L->data[i]!=e)i++;//查找元素eif (i>=L->length)//未找到时返回0return 0;elsereturn i+1;//找到后返回其逻辑序号}bool ListInsert(SqList *&L,int i,ElemType e)//插入数据元素{int j;if (i<1 || i>L->length+1)return false;//参数错误时返回falsei--;//将顺序表逻辑序号转化为物理序号for (j=L->length;j>i;j--)//将data[i]及后面元素后移一个位置L->data[j]=L->data[j-1];L->data[i]=e;//插入元素eL->length++;//顺序表长度增1return true;//成功插入返回true}bool ListDelete(SqList *&L,int i,ElemType &e)//删除数据元素{int j;if (i<1 || i>L->length)//参数错误时返回falsereturn false;i--;//将顺序表逻辑序号转化为物理序号e=L->data[i];for (j=i;j<L->length-1;j++)//将data[i]之后的元素前移一个位置L->data[j]=L->data[j+1];L->length--;//顺序表长度减1return true;//成功删除返回true}void main(){SqList *L;ElemType e;printf("顺序表的基本运算如下:\n");printf(" (1)初始化顺序表L\n");InitList(L);printf(" (2)依次采用尾插法插入a,b,c,d,e元素\n");ListInsert(L,1,'a');ListInsert(L,2,'b');ListInsert(L,3,'c');ListInsert(L,4,'d');ListInsert(L,5,'e');printf(" (3)输出顺序表L:");DispList(L);printf(" (4)顺序表L长度=%d\n",ListLength(L));printf(" (5)顺序表L为%s\n",(ListEmpty(L)?"空":"非空"));GetElem(L,3,e);printf(" (6)顺序表L的第3个元素=%c\n",e);实验结果:心得体会:通过本次实验,实现了数据结构在程序设计上的作用,了解了数据结构语言,加深了对c语言的认识掌并掌握了线性表的顺序存储结构的表示和实现方法,掌握顺序表基本操作的算法实现,同时了解了顺序表的应用。
顺序表的基本操作
2.输入5个数,分别为1,2,3,4,5
3.求线性表是否为空:
4.求线性表的长度:
5.输出顺序表的第4个元素:
6.输出第一次出现元素3的位置:
7.向线性表中插入一个元素:
8.删除元素4,并输出
9.输出线性表的元素:
10.在线性表的-1位置插入数据:
11.清空线性表的所有元素
五、实验总结
1.由于线性表是采用的是数组存储,因此,在第i个位置添加或删除
一个元素时,需要移动n-i个位置,其时间复杂度为O(n)
2.顺序表的删除并非真正意义的删除,由于数组的特殊原因,只是
显示的一种“假象”,如果采用动态的扩展空间,可以实现真正意。
数据结构c++顺序表、单链表的基本操作,查找、排序代码
实验1:顺序表的基本操作实验2:单链表的基本操作实验3:查找实验4:排序实验1代码及结果:#include <iostream>using namespace std;template <class T>class sq_LList{private:int mm;int nn;T *v;public:sq_LList(){mm=0;nn=0;return;}sq_LList(int);void prt_sq_LList();int flag_sq_LList();void ins_sq_LList(int,T);void del_sq_LList(int);};//建立空顺序表template <class T>sq_LList<T>::sq_LList(int m){mm=m;v=new T[mm];nn=0;return;}//顺序输出顺序表中的元素与顺序表长度template <class T>void sq_LList<T>::prt_sq_LList(){int i;cout<<"nn="<<nn<<endl;for(i=0;i<nn;i++)cout<<v[i]<<endl; return;}//检测顺序表的状态template <class T>int sq_LList<T>::flag_sq_LList(){if(nn=mn)return(-1);if(nn=0)return(0);return (1);}//在表的指定元素前插入新元素template<class T>void sq_LList<T>::ins_sq_LList(int i,T b){int k;if(nn==mm){cout<<"overflow"<<endl;return;}if(i>nn)i=nn+1;if(i<1)i=1;for(k=nn;k>=i;k--)v[k]=v[k-1];v[i-1]=b;nn=nn+1;return ;}//在顺序表中删除指定元素template<class T>void sq_LList<T>::del_sq_LList(int i){int k;if(nn==0){cout<<"underflow!"<<endl;return;}for(k=i;k<nn;k++)v[k-1]=v[k];nn=nn-1;return ;}int main(){sq_LList<double>s1(100);cout<<"第一次输出顺序表对象s1:"<<endl; s1.prt_sq_LList();s1.ins_sq_LList(0,1.5);s1.ins_sq_LList(1,2.5);s1.ins_sq_LList(4,3.5);cout<<"第二次输出顺序表对象s1:"<<endl; s1.prt_sq_LList();s1.del_sq_LList(0);s1.del_sq_LList(2);cout<<"第三次输出顺序表对象s1:"<<endl; s1.prt_sq_LList();return 0;}运行及结果:实验2代码#include<iostream>#include<iomanip>using namespace std;struct node{float data;node *next;};node *create(){ //建立单链表node *head,*p,*s;head=new node;p=head;p->data=0;p->next=0; //表头创建完成float newnum=0;cin>>newnum;if(newnum<0){cout<<"未输入数据...\n";//输入负数则结束system("pause");}while(newnum>=0 ){ //??如何用字符型作为结束标志s=new node; //创建表中数据s->data=newnum;p->next=s;p=s;cin>>newnum;}p->next=NULL; //最后元素指针return(head); //返回空表头}//插入一个结点x,将成为第i个节点void insertnode(node *head,int i,float x){node *s,*p;int j;s=new node;s->data=x;p=head;j=1; //查找第i个结点,由p指向while(p!=NULL && j<i){j++;p=p->next;}s->next=p->next;p->next=s;}//删除结点xvoid deletenode(node *head,float x){node *p,*s;if(head->next==NULL)cout<<"这是空链表,不能执行删除操作\n"; else{s=head;p=head->next;while(p!=NULL && p->data!=x)if(p->data!=x){s=p;p=p->next;}if(p!=NULL){s->next=p->next;delete(p);}else cout<<"未找到!\n";}}//存取链表某节点Kvoid read(node*head,int k){while(head->next!=0&&k>0){head=head->next;k--;}cout<<"该处数据为"<<head->data<<".\n\n"; }int main( ) {node *linktable=0;int choice=1;cout<<"1.创建链表\n";cout<<"2.显示信息\n";cout<<"3.删除信息\n";cout<<"4.查找信息\n";cout<<"5.插入信息\n";cout<<"6.读取信息\n";cout<<"0.退出程序\n";cout<<"请输入您的选择:";cin>>choice;while(1){switch (choice){case 0: exit(0);case 1:{cout<<"输入正数数据,并以负数作为结束标记\n";linktable=create();break;}case 2:{cout<<"链表长度为"<<length(linktable)<<",详细信息:\n";printlist(linktable);break;}case 3:{cout<<"要删除的数据为?\n";float del;cin>>del;deletenode(linktable,del);break;}case 4:{if(linktable->next==0)cout<<"链表为空,不能查找\n";else{cout<<"要查找数据为?";float search;cin>>search;find(linktable,search);} break;}case 5:{cout<<"存储数据为?";int des;float it;cin>>it;cout<<"想让该数据存储为第几个节点?";cin>>des;if((des>(length(linktable)+1)||des<1))cout<<"输入错误\n";elseinsertnode(linktable,des,it);break;}case 6:{cout<<"想读取第几个节点?";int c;cin>>c;if(c<1||c>length(linktable))cout<<"位置不合法\n";elseread(linktable,c);break;}default :cout<<"输入错误!\n";}system("pause");system("cls");cout<<"当前信息:\n";printlist(linktable);cout<<"\n1.创建链表\n";cout<<"2.显示信息\n";cout<<"3.删除信息\n";cout<<"4.查找信息\n";cout<<"5.插入信息\n";cout<<"6.读取信息\n";cout<<"0.退出程序\n";cout<<"继续选择:\n";cin>>choice;}return 0;}实验三查找实验名称:实验3 查找实验目的:掌握顺序表和有序表的查找方法及算法实现;掌握二叉排序树和哈希表的构造和查找方法。
顺序表的建立、输入、输出、查找、插入、删除(数据结构)
顺序表的建⽴、输⼊、输出、查找、插⼊、删除(数据结构)1.顺序表的基本操作实践。
(1)建⽴4个元素的顺序表list[]={2,3,4,5},实现顺序表建⽴的基本操作。
(2)在list[]={2,3,4,5}的元素4和5之间插⼊⼀个元素9,实现顺序表插⼊的基本操作。
(3)在list[]={2,3,4,9,5}中删除指定位置(i=3)上的元素4,实现顺序表的删除的基本操作。
#include <stdio.h>#include <stdlib.h>#include <iostream>#define MAXSIZE 10using namespace std;typedef int ElemType;typedef struct {ElemType a[MAXSIZE];int length;} S;void CreatList(S &L) {scanf("%d", &L.length);for(int i = 1; i <= L.length; i ++) scanf("%d",&L.a[i]);} //创建列表void PutList(S L) {for(int i = 1; i <= L.length; i ++) {printf("%d ",L.a[i]);}printf("\n");} //输出列表void InserElem(S &L, int i, ElemType x) { j iif(i < 1 || i > L.length) return; 2 3 4 5 9for(int j = L.length+1; j > i; j --) { j-1jL.a[j] = L.a[j-1]; 2 3 4 9 5}L.a[i] = x;L.length++;} //插⼊void DeleElem(S &L, int i) {for(int j = i; j < L.length; j ++) {L.a[j] = L.a[j+1]; j j+1} 2 3 4 9 5L.length--;}//删除int main() {S L;CreatList(L);InserElem(L,4,9);PutList(L);DeleElem(L,3);PutList(L);return0;}结果E:\c++>b42345234952395。
实验一顺序表的基本操作1
实验⼀顺序表的基本操作1实验⼀:顺序表的基本操作⼀、实验⽬的1.掌握线性表的顺序存储结构的表⽰和实现⽅法。
2.掌握顺序表基本操作的算法实现。
3.了解顺序表的应⽤。
⼆、实验环境硬件环境要求:PC 机(单机)使⽤的软件名称、版本号以及模块:Visual C++ 6.0 或 Turbo C 或 Win-TC 等。
三、实验内容编写⼀个程序,实现顺序表的各种基本运算(假设顺序表的元素类型为 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;四、实验要求1、⽤ Visual C++ 6.0 或 Turbo C 或 Win-TC ⼯具创建⽂件或程序,输⼊代码后,进⾏编译运⾏或在控制台执⾏。
2、观看程序运⾏结果,并根据结果进⾏思考,对程序进⾏修改和总结。
3、请在实验报告上写上实验要求、规范的程序代码、运⾏结果和你的总结体会。
【核⼼算法提⽰】1.顺序表插⼊操作的基本步骤:要在顺序表中的第 i 个数据元素之前插⼊⼀个数据元素 x,⾸先要判断插⼊位置 i 是否合法,假设线性表的表长为 n,则 i 的合法值范围:1≤i≤n+1,若是合法位置,就再判断顺序表是否满,如果满,则增加空间或结束操作,如果不满,则将第 i 个数据元素及其之后的所有数据元素都后移⼀个位置,此时第 i 个位置已经腾空,再将待插⼊的数据元素 x 插⼊到该位置上,最后将线性表的表长增加 1。
2.顺序表删除操作的基本步骤:要删除顺序表中的第 i 个数据元素,⾸先仍然要判断i 的合法性,i 的合法范围是1≤i≤n,若是合法位置,则将第i 个数据元素之后的所有数据元素都前移⼀个位置,最后将线性表的表长减 1。
数据结构实验报告顺序表
数据结构实验报告顺序表数据结构实验报告:顺序表摘要:顺序表是一种基本的数据结构,它通过一组连续的存储单元来存储线性表中的数据元素。
在本次实验中,我们将通过实验来探索顺序表的基本操作和特性,包括插入、删除、查找等操作,以及顺序表的优缺点和应用场景。
一、实验目的1. 理解顺序表的概念和特点;2. 掌握顺序表的基本操作;3. 了解顺序表的优缺点及应用场景。
二、实验内容1. 实现顺序表的初始化操作;2. 实现顺序表的插入操作;3. 实现顺序表的删除操作;4. 实现顺序表的查找操作;5. 对比顺序表和链表的优缺点;6. 分析顺序表的应用场景。
三、实验步骤与结果1. 顺序表的初始化操作在实验中,我们首先定义了顺序表的结构体,并实现了初始化操作,即分配一定大小的存储空间,并将表的长度设为0,表示表中暂时没有元素。
2. 顺序表的插入操作接下来,我们实现了顺序表的插入操作。
通过将插入位置后的元素依次向后移动一位,然后将新元素插入到指定位置,来实现插入操作。
我们测试了在表中插入新元素的情况,并验证了插入操作的正确性。
3. 顺序表的删除操作然后,我们实现了顺序表的删除操作。
通过将删除位置后的元素依次向前移动一位,来实现删除操作。
我们测试了在表中删除元素的情况,并验证了删除操作的正确性。
4. 顺序表的查找操作最后,我们实现了顺序表的查找操作。
通过遍历表中的元素,来查找指定元素的位置。
我们测试了在表中查找元素的情况,并验证了查找操作的正确性。
四、实验总结通过本次实验,我们对顺序表的基本操作有了更深入的了解。
顺序表的插入、删除、查找等操作都是基于数组的操作,因此在插入和删除元素时,需要移动大量的元素,效率较低。
但是顺序表的优点是可以随机访问,查找效率较高。
在实际应用中,顺序表适合于元素数量不变或变化不大的情况,且需要频繁查找元素的场景。
综上所述,顺序表是一种基本的数据结构,我们通过本次实验对其有了更深入的了解,掌握了顺序表的基本操作,并了解了其优缺点及应用场景。
顺序表的基本操作--插入,删除,合并
scanf("%d",&i);
printf("Please input the elemvalue:\n");
scanf("%d",&e);
if(ListInsert_Sq(&La,i,e)==OK)
{
for(i=1;i<=;i++)
for(i=1;i<=n;i++)
{
scanf("%d",&e) ;
if(ListInsert_Sq(&La,i,e)!=OK)break;
}
for(i=1;i<=;i++)
printf("e[%d]=%d\n",i-1,[i-1]);
printf("Length: %d\n\n",;
/*-------------INSERT-----------------*/
printf("Length: %d\n",;
printf("Listsize: %d\n\n",;
}
else
printf("error!");
/*------------------INIT-----------------*/
if(InitList_sq(&Lc))
{
printf("Init is ok!\n");
printf("Please input the values of Lb:\n");
数据结构实验报告_单链表
数据结构实验报告_单链表【实验目的】1、顺序表的基本操作及c语言实现【实验要求】1、用c语言建立自己的线性表结构的程序库,实现顺序表的基本操作。
2、对线性表表示的集合,集合数据由用户从键盘输入(数据类型为整型),建立相应的顺序表,且使得数据按从小到大的顺序存放,将两个集合的并的结果存储在一个新的线性表集合中,并输出。
【实验内容】1、根据教材定义的顺序表机构,用c语言实现顺序表结构的创建、插入、删除、查找等操作;2、利用上述顺序表操作实现如下程序:建立两个顺序表表示的集合(集合中无重复的元素),并求这样的两个集合的并。
【实验结果】[实验数据、结果、遇到的问题及解决]一.statusinsertorderlist(sqlist&va,elemtypex){}二.statusdeletek(sqlist&a,inti,intk){//在非递减的顺序表va中插入元素x并使其仍成为顺序表的算法inti;if(v==ze)return(overflow);for(i=v;i>0,x }//注意i的编号从0开始intj;if(i<0||i>-1||k<0||k>-i)returninfeasible;for(j=0;j<=k;j++)[j+i]=[j+i+k];=-k;returnok;三.//将合并逆置后的结果放在c表中,并删除b表statuslistmergeoppose_l(linklist&a,linklist&b,linklist& c){linklistpa,pb,qa,qb;pa=a;pb=b;qa=pa;qb=pb;//保存pa的前驱指针//保存pb的前驱指针pa=pa->next;pb=pb->next;a->next=null;c=a;while(pa&&pb){}whi le(pa){}qa=pa;pa=pa->next;qa->next=a->next;a->next=qa;if(pa ->datadata){}else{}qb=pb;pb=pb->next;qb->next=a->next;//将当前最小结点插入a表表头a->next=qb;qa=pa;pa=pa->next;qa->next=a->next;//将当前最小结点插入a表表头a->next=qa;}}pb=b;free(pb);returnok;qb=pb;pb=pb->next;qb->next=a->n ext;a->next=qb;顺序表就是把线性表的元素存储在数组中,元素之间的关系直接通过相邻元素的位置来表达。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include<stdio.h>#include<stdlib.h>#define LIST_INIT_SIZE 100#define LISTINCREMNT 10#define OK 1#define ERROR 0typedef struct{int *a;int length;int listsize;}Sqlist;int initlist(Sqlist &L){L.a=(int *)malloc(LIST_INIT_SIZE *sizeof(int));if(!L.a)exit(0);L.length=0;int i;printf("初始的数组为\n");for(i=0;i<7;i++){ L.a[i]=i; L.length++;printf("\t%d",L.a[i]);}printf("\n");L.listsize=LIST_INIT_SIZE;return OK;}int listinsert(Sqlist &L,int i,int e){int *q,*p,*newbase;if(i<1||i>L.length+1)return ERROR;if(L.length>=L.listsize){newbase=(int *)realloc(L.a,(L.listsize+LISTINCREMNT)*sizeof(int)); if(!newbase)exit(0);L.a=newbase;L.listsize+=LISTINCREMNT;}q=&(L.a[i-1]);for(p=&(L.a[L.length-1]);p>=q;--p)*(p+1)=*p;*q=e;++L.length;for(i=0;i<L.length;i++)printf("\t%d",L.a[i]); printf("\n");return OK;}int listdelete(Sqlist &L,int i,int &e){int *p,*q;if(i<1||(i>L.length))return ERROR;p=&(L.a[i-1]);e=*p;q=L.a+L.length-1;for(++p;p<=q;++p)*(p-1)=*p;--L.length;for(i=0;i<L.length;i++)printf("\t%d",L.a[i]); printf("\n");return OK;}void main(){Sqlist L;initlist(L);int m,n;printf("请输入要插入元素的位置:");scanf("%d",&m);printf("请输入要插入的元素:");scanf("%d",&n);printf("查入元素%d后的数组:\n",n); listinsert(L,m,n);printf("请输入要删除元素的位置:");scanf("%d",&m);printf("删除%d位置的元素后的数组:\n",m); listdelete(L,m,n);}#include"stdio.h"#include"malloc.h"#include"stdlib.h"#define INITLISTSIZE 100#define INCREMENT 10#define error 0typedef struct{int *elem;int length;int listsize;}Sqlist;int CreatLinklist(Sqlist &L);int InitLinklist(Sqlist &L, int n);void print(Sqlist &L);int GetElem(Sqlist L, int i, int &e);int InsertList(Sqlist &L,int i,int e);int ListDele_Sq(Sqlist &L,int i,int &e);void MergeLinklist(Sqlist La, Sqlist Lb, Sqlist &Lc);int CreatLinklist(Sqlist &L){L.elem=(int*)malloc(sizeof(int)*INITLISTSIZE);if(!L.elem)exit(1);L.length=0;L.listsize=INITLISTSIZE;return 1;}int InitLinklist(Sqlist &L, int n){int *p,i;if(n>L.listsize){ L.elem=(int*)realloc(L.elem,sizeof(int)*(INITLISTSIZE+INCREMENT)); L.listsize+=INCREMENT;}if(!L.elem)exit(1);p=L.elem;for(i=0;i<n;i++){scanf("%d",p++);++L.length;}return 1;}void print(Sqlist &L){int *p1;p1=L.elem;printf("*********************\n");while(p1<L.elem+L.length)printf("%d ", *p1++);printf("\n*********************\n");}#if 0int GetElem(Sqlist L, int i, int &e){if(i<1||i>L.length) return error;e=L.elem[i-1];return 1;}#endifint InsertList(Sqlist &L, int i, int e){int *q,*p;if(i<1||i>L.length+1) return error;if(L.length>=L.listsize){L.elem=(int*)realloc(L.elem,sizeof(int)*(INITLISTSIZE+INCREMENT)); L.listsize+=INCREMENT;}if(!L.elem)exit(1);q=&L.elem[i-1];for(p=&L.elem[L.length-1];p>=q;p--)*(p+1)=*p;*q=e;++L.length;return 1;}int ListDele_Sq(Sqlist &L,int i,int &e){int *p,*q;if((i<1)||(i>L.length)) return error;e=*p;q=&(L.elem[L.length-1]);for(++p;p<=q;++p)*(p-1)=*p;--L.length;return 1;}void MergeLinklist(Sqlist La, Sqlist Lb, Sqlist &Lc){int i=0, j=0,k=0;int *p=La.elem,*q=Lb.elem;if(Lc.listsize<La.listsize+Lb.listsize)Lc.elem=(int *)realloc(Lc.elem,sizeof(int)*(La.listsize+Lb.listsize)); Lc.listsize=La.listsize+Lb.listsize;while( (i<La.length) && (j<Lb.length) ){if(p[i]<q[j]){Lc.elem[k++]=p[i];++i;++Lc.length;}else{Lc.elem[k++]=q[j];++j;++Lc.length;}}while((i<La.length)){Lc.elem[k++]=p[i];++i;++Lc.length;}free(La.elem);while(j<Lb.length){++j;++Lc.length;}free(Lb.elem);}int main(){int a1,a2, p1,p2, b, e;Sqlist La, Lb, Lc;CreatLinklist(La);printf("Input the length of the List A: ");scanf("%d",&a1);printf("Please Init the List A from small to big:"); InitLinklist(La, a1);print(La);CreatLinklist(Lb);printf("\nInput the length of the List B: ");scanf("%d",&a2);printf("Please Init the List B from small to big:");InitLinklist( Lb, a2);print(Lb);printf("\nThe merged list C is as follows:\n");CreatLinklist(Lc);MergeLinklist(La, Lb, Lc);print(Lc);printf("\nInput the Inserted position and the Inserted value:\n"); scanf("%d%d", &p1, &b);InsertList(Lc, p1, b);print(Lc);printf("\nInput the deleted position :\n");scanf("%d", &p2);ListDele_Sq(Lc, p2, e);print(Lc);printf("THe deleted number is %d.\n",e);free(Lc.elem);return 0;}。