当前位置:文档之家› 实验一顺序表与链表

实验一顺序表与链表

实验一顺序表与链表
实验一顺序表与链表

实验一顺序表与链表

一、实验目的

1、掌握线性表中元素的前驱、后续的概念。

2、掌握顺序表与链表的建立、插入元素、删除表中某元素的算法。

3、对线性表相应算法的时间复杂度进行分析。

4、理解顺序表、链表数据结构的特点(优缺点)。

二、实验预习

说明以下概念

1、线性表:

2、顺序表:

3、链表:

三、实验容和要求

1、阅读下面程序,在横线处填写函数的基本功能。并运行程序,写出结果。

#include

#include

#define ERROR 0

#define OK 1

#define INIT_SIZE 5 /*初始分配的顺序表长度*/

#define INCREM 5 /*溢出时,顺序表长度的增量*/

typedef int ElemType; /*定义表元素的类型*/

typedef struct Sqlist{

ElemType *slist; /*存储空间的基地址*/

int length; /*顺序表的当前长度*/

int listsize; /*当前分配的存储空间*/

}Sqlist;

int InitList_sq(Sqlist *L); /* 构造一个空的线性表L*/

int CreateList_sq(Sqlist *L,int n); /* 构造顺序表的长度为n */

int ListInsert_sq(Sqlist *L,int i,ElemType e);/* 在L中第i个位置之前插入新的数据元素e,L的长度加1 */

int PrintList_sq(Sqlist *L); /*输出顺序表的元素*/

int ListDelete_sq(Sqlist *L,int i); /*删除第i个元素*/

int ListLocate(Sqlist *L,ElemType e); /*查找值为e的元素*/

int InitList_sq(Sqlist *L){

L->slist=(ElemType*)malloc(INIT_SIZE*sizeof(ElemType));

if(!L->slist) return ERROR;

L->length=0;

L->listsize=INIT_SIZE;

return OK;

}/*InitList*/

int CreateList_sq(Sqlist *L,int n){

ElemType e;

int i;

for(i=0;i

printf("input data %d",i+1);

scanf("%d",&e);

if(!ListInsert_sq(L,i+1,e))

return ERROR;

}

return OK;

}/*CreateList*/

/*输出顺序表中的元素*/

int PrintList_sq(Sqlist *L){

int i;

for(i=1;i<=L->length;i++)

printf("%5d",L->slist[i-1]);

return OK;

}/*PrintList*/

int ListInsert_sq(Sqlist *L,int i,ElemType e){

int k;

if(i<1||i>L->length+1)

return ERROR;

if(L->length>=L->listsize){

L->slist=(ElemType*)realloc(L->slist,

(INIT_SIZE+INCREM)*sizeof(ElemType));

if(!L->slist)

return ERROR;

L->listsize+=INCREM;

}

for(k=L->length-1;k>=i-1;k--){

L->slist[k+1]= L->slist[k];

}

L->slist[i-1]=e;

L->length++;

return OK;

}/*ListInsert*/

/*在顺序表中删除第i个元素*/

int ListDelete_sq(Sqlist *L,int i){

}

/*在顺序表中查找指定值元素,返回其序号*/

int ListLocate(Sqlist *L,ElemType e){

}

int main(){

Sqlist sl;

int n,m,k;

printf("please input n:"); /*输入顺序表的元素个数*/

scanf("%d",&n);

if(n>0){

printf("\n1-Create Sqlist:\n");

InitList_sq(&sl);

CreateList_sq(&sl,n);

printf("\n2-Print Sqlist:\n");

PrintList_sq(&sl);

printf("\nplease input insert location and data:(location,data)\n");

scanf("%d,%d",&m,&k);

ListInsert_sq(&sl,m,k);

printf("\n3-Print Sqlist:\n");

PrintList_sq(&sl);

printf("\n");

}

else

printf("ERROR");

return 0;

}

运行结果

●算法分析

调用ListInsert_sq()函数,进行插入操作,并输出插入新元素后的状态,时间复杂度,空间复杂度较少,

2、为第1题补充删除和查找功能函数,并在主函数中补充代码验证算法的正确性。

删除算法代码:

int ListDelete_sq(Sqlist *L,int i){

int p;

if(i<1||i>L->length)

return ERROR;

for(p=i-1;plength-1;p++){

L->slist[p]=L->slist[p+1];

}

L->length --;

return OK;

}

●运行结果

算法分析

主函数调用ListDelete_sq实现删除操作,在输出删除之后的线性表,时间复杂度低查找算法代码:

int ListLocate(Sqlist *L,ElemType e){

int i=0;

while((i<=L->length) && (L->slist [i]!=e)){

i++;

}

if(i<=L->length )

return (i+1);

else

return -1;

}

●运行结果

●算法分析

主函数通过调用ListLocate实现查找功能,然后输出查找元素的序号,时间复杂度低

3、阅读下面程序,在横线处填写函数的基本功能。并运行程序,写出结果。

#include

#include

#define ERROR 0

#define OK 1

typedef int ElemType; /*定义表元素的类型*/

typedef struct LNode{ /*线性表的单链表存储*/

ElemType data;

struct LNode *next;

}LNode,*LinkList;

LinkList CreateList(int n); /* 构造顺序表的长度为n

void PrintList(LinkList L); /*输出带头结点单链表的所有元素*/

int GetElem(LinkList L,int i,ElemType *e); /* 在顺序表L中,将第i个元素存在时,替换成e*/

LinkList CreateList(int n){

LNode *p,*q,*head;

int i;

head=(LinkList)malloc(sizeof(LNode)); head->next=NULL;

p=head;

for(i=0;i

q=(LinkList)malloc(sizeof(LNode)); printf("input data %i:",i+1);

scanf("%d",&q->data); /*输入元素值*/

q->next=NULL; /*结点指针域置空*/

p->next=q; /*新结点连在表末尾*/

p=q;

}

return head;

}/*CreateList*/

void PrintList(LinkList L){

LNode *p;

p=L->next; /*p指向单链表的第1个元素*/

while(p!=NULL){

printf("%5d",p->data);

p=p->next;

}

}/*PrintList*/

int GetElem(LinkList L,int i,ElemType *e){

LNode *p;int j=1;

p=L->next;

while(p&&j

p=p->next;j++;

}

if(!p||j>i)

return ERROR;

*e=p->data;

return OK;

}/*GetElem*/

int main(){

int n,i;ElemType e;

LinkList L=NULL; /*定义指向单链表的指针*/

printf("please input n:"); /*输入单链表的元素个数*/

scanf("%d",&n);

if(n>0){

printf("\n1-Create LinkList:\n");

L=CreateList(n);

printf("\n2-Print LinkList:\n");

PrintList(L);

printf("\n3-GetElem from LinkList:\n");

printf("input i=");

scanf("%d",&i);

if(GetElem(L,i,&e))

printf("No%i is %d",i,e);

else

printf("not exists");

}else

printf("ERROR");

return 0;

}

●运行结果

●算法分析

主函数调用GetElem函数实现输出序号所对应的元素,时间复杂度低

4、为第3题补充插入功能函数和删除功能函数。并在主函数中补充代码验证算法的正确性。插入算法代码:

int ListInsert_sq(LNode*L,int i,ElemType e){int k;

if(i<1||i>L->length+1)

实验一.顺序表验证实验

线性表 实验一顺序表操作验证 1. 实验目的 ⑴掌握线性表的顺序存储结构; ⑵验证顺序表及其基本操作的实现; ⑶掌握数据结构及算法的程序实现的基本方法。 2. 实验内容 ⑴建立含有若干个元素的顺序表; ⑵对已建立的顺序表实现插入、删除、查找等基本操作。 3. 实现提示 首先定义顺序表的数据类型——顺序表类SeqList,包括题目要求的插入、删除、查找等基本操作,为便于查看操作结果,设计一个输出函数依次输出顺序表的元素。 const int MaxSize=10; template //定义模板类SeqList class SeqList { public: SeqList( ){length=0;} //无参构造函数 SeqList(T a[ ], int n);//有参构造函数 void Insert(int i, T x); //在线性表中第i个位置插入值为x的元素 T Delete(int i); //删除线性表的第i个元素 int Locate(T x ); //按值查找,求线性表中值为x的元素序号 void PrintList( ); //遍历线性表,按序号依次输出各元素 private: T data[MaxSize]; //存放数据元素的数组 int length; //线性表的长度 }; 其次,建立含有n个数据元素的顺序表,即设计构造函数。算法如下: 最后,对建立的顺序表设计插入、删除、查找等基本操作的算法。

顺序表 ⑴插入算法 ⑵删除算法 ⑶查找算法

线性表班级:_________ 学号:_____________ 姓名:___________ 成绩:_________ 实验一顺序表操作验证 一、实验目的 二、实验内容 三、设计与编码 a)本实验用到的理论知识 实验用到的理论知识,实现理论与实践相结合。总结尽量简明扼要,并与本次实验密切相关。 b)算法设计 对本次实验内容设计c++类定义,设计算法完成每个成员函数。 c)编码 将算法转化为c++程序,设计主函数完成对各成员函数的调用。 四、运行与调试 a)在调试程序的过程中遇到什么问题,是如何解决的? b)设计了哪些设计数据?测试结果是什么? c)程序运行的结果如何? 五、实验小结 说明:1.实验报告用A4纸打印。 2.实验标题用黑体小三加粗。 3.每节标题用黑体小四加粗。 4.正文用宋体五号字。

实验一 顺序表操作实现

实验一顺序表操作实现 实验日期:2017 年 3 月 6 日 实验目的及要求 1. 熟练掌握线性表的基本操作在顺序存储上的实现; 2. 以线性表的各种操作(建立、插入、删除、遍历等)的实现为重点; 3. 掌握线性表的顺序存储结构的定义和基本操作的实现; 4. 通过本实验加深对C语言的使用(特别是函数调用的参数传递、指针类型的应用)。实验内容 已知程序文件seqlist.cpp已给出学生身高信息顺序表的类型定义和基本运算函数定义。 (1)顺序表类型定义 typedef struct { int xh; /*学号*/ float sg; /*身高*/ int sex; /*性别,0为男生,1为女生*/ } datatype; typedef struct{ datatype data[MAX]; /*存放顺序表元素的数组*/ int last; /*表示data中实际存放元素个数*/ }Seqlist; (2)基本运算函数原型 void initList(Seqlist *lp);/*置一个空表*/ void createList(Seqlist *lp);/*建一个学生顺序表*/ void sort_xh(Seqlist *lp);/*按学号排序*/ void Error(char *s);/*自定义错误处理函数*/ void pntList(Seqlist *lp);/*输出学生表*/ void save(Seqlist *lp,char strname[]);/*保存学生顺序表到指定文件*/

任务一 创建程序文件seqlist.cpp,其代码如下所示,理解顺序表类型Seqlist和基本运算函数后回答下列问题。 /*seqlist.cpp程序文件代码*/ #include #include #define MAX 50 typedef struct { int xh; /*学号*/ float sg; /*身高*/ int sex; /*性别,0为男生,1为女生*/ } datatype; typedef struct{ datatype data[MAX]; /*存放顺序表元素的数组*/ int last; /*表示data中实际存放元素个数*/ }Seqlist; void initList(Seqlist *lp);/*置一个空表*/ void createList(Seqlist *lp);/*建一个学生顺序表*/ void sort_xh(Seqlist *lp);/*按学号排序*/ void Error(char *s);/*自定义错误处理函数*/ void pntList(Seqlist *lp);/*输出学生表*/ void save(Seqlist *lp,char strname[]);/*保存学生顺序表到指定文件*/ /*置一个空表*/ void initList(Seqlist *lp) { lp->last=0; } /*建一个学生顺序表*/ void createList(Seqlist *lp) { FILE *fp; int xh ,sex; float sg; if((fp=fopen("records.txt","r"))==NULL) { Error("can not open file !"); } while(!feof(fp)) { fscanf(fp,"%d%f%d",&xh,&sg,&sex); lp->data[lp->last].xh=xh; lp->data[lp->last].sg=sg; lp->data[lp->last].sex=sex; lp->last++; } fclose(fp);

实验报告一顺序表的操作

《数据结构》实验报告一 系别:班级: 学号:姓名: 日期:指导教师: 一、上机实验的问题和要求: 顺序表的查找、插入与删除。设计算法,实现线性结构上的顺序表的产生以及元素的查找、插入与删除。具体实现要求: 从键盘输入10个整数,产生顺序表,并输入结点值。 从键盘输入1个整数,在顺序表中查找该结点的位置。若找到,输出结点的位置;若找不到,则显示“找不到”。 从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插入在对应位置上,输出顺序表所有结点值,观察输出结果。 从键盘输入1个整数,表示欲删除结点的位置,输出顺序表所有结点值,观察输出结果。二、程序设计的基本思想,原理和算法描述: (包括程序的结构,数据结构,输入/输出设计,符号名说明等) 三、源程序及注释:

#include <> /*顺序表的定义:*/ #define ListSize 100 /*表空间大小可根据实际需要而定,这里假设为100*/ typedef int DataType; /*DataType可以是任何相应的数据类型如int, float或char*/ typedef struct { DataType data[ListSize]; /*向量data用于存放表结点*/ int length; /*当前的表长度*/ }SeqList; /*子函数的声明*/ void CreateList(SeqList * L,int n); /*创建顺序表函数*/ int LocateList(SeqList L,DataType x); /*查找顺序表*/ void InsertList(SeqList * L,DataType x,int i); /*在顺序表中插入结点x*/ void DeleteList(SeqList * L,int i);/*在顺序表中删除第i个结点*/ void PrintList(SeqList L,int n); /*打印顺序表中前n个结点*/ void main() { SeqList L; int n=10,x,i; /*欲建立的顺序表长度*/ =0;

实验1顺序表和链表基本操作(给学生)

实验一、二:线性表的应用 班级学号姓名 一、实验预备知识 1 复习C++中编写函数的相关内容。 2 复习如何用主函数将多个函数连在一起构成一个C++完整程序。 二、实验目的 1 掌握线性表的顺序和链式存储结构 2 熟练运用线性表在顺序存储方式下的初始化、创建、输出、插入和删除运算 3 熟练运用线性表在链式存储方式下的创建、输出、插入和删除运算 三、实验要求 1 编写初始化并创建线性表和输出线性表的算法。 2 编写对线性表插入和删除运算算法,要判断位置的合法性和溢出问题。 3 编写一个主函数,将上面函数连在一起,构成一个完整的程序。 4将实验源程序调试并运行,写出输入、输出结果,并对结果进行分析。 四、实验步骤 顺序表实验内容: 1.给定的线性表为L=(12,25,7,42,19,38),元素由键盘输入。 2.初始化并建立顺序表。 3.编写顺序表输出算法。(内存中开辟的单元数为8) 4.依次插入3,21,15三个数,分别插入在第4,6和2位置,每插入一次都要输出一次顺序表。 5.删除第5,第3和第12个位置上的元素,每删除一个元素都要输出一次顺序表。 单链表实验内容: 1.给定的线性表为L=(12,25,7,42,19,38),元素由键盘输入。 2.建立一个带表头结点的单链表(前插入法和尾插入法都可以)。 3.编写单链表输出算法。 4.依次插入3,21,15三个数,分别插入在第4,6和12位置,每插入一次都要输出一次单链表。 5.删除第5,第3和第12个位置上的元素,每删除一个元素都要输出一次单链表。 五、实验结果 1.给出程序清单及输入/输出结果。 2.实验过程中遇到的问题、解决方法及心得体会。

顺序表实验报告

《数据结构》实验报告一 系别:嵌入式系统工程系班级:嵌入式11003班 学号:11160400314 姓名:xxx 日期:2012年4月9日指导教师XX 一、上机实验的问题和要求: 顺序表的查找、插入与删除。设计算法,实现线性结构上的顺序表的产生以及元素的查找、插入与删除。具体实现要求: 1.从键盘输入10个整数,产生顺序表,并输入结点值。 2.从键盘输入1个整数,在顺序表中查找该结点的位置。若找到,输出结点的位置;若找 不到,则显示“找不到”。 3.从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插 入在对应位置上,输出顺序表所有结点值,观察输出结果。 4.从键盘输入1个整数,表示欲删除结点的位置,输出顺序表所有结点值,观察输出结果。 二、程序设计的基本思想,原理和算法描述: (包括程序的结构,数据结构,输入/输出设计,符号名说明等) 创建一个顺序表,实现对顺序表的插入,查找,删除等功能。 三、源程序及注释: #include /*顺序表的定义:*/ #define ListSize 100 /*表空间大小可根据实际需要而定,这里假设为100*/ typedef int DataType; /*DataType可以是任何相应的数据类型如int, float或char*/ typedef struct { DataType data[ListSize]; /*向量data用于存放表结点*/ int length; /*当前的表长度*/ }SeqList; /*子函数的声明*/

void CreateList(SeqList * L,int n); /*创建顺序表函数*/ int LocateList(SeqList L,DataType x); /*查找顺序表*/ void InsertList(SeqList * L,DataType x,int i); /*在顺序表中插入结点x*/ void DeleteList(SeqList * L,int i);/*在顺序表中删除第i个结点*/ void PrintList(SeqList L,int n); /*打印顺序表中前n个结点*/ void main() { SeqList L; int n=10,x,i; /*欲建立的顺序表长度*/ L.length=0; /*调用创建线性表函数*/ printf(“create function:\n”); CreateList(&L,n); /*建立顺序表*/ PrintList(L,n); /*打印顺序表*/ /*调用查找函数*/ printf(“search function:\n”); printf("input the data you want to search:"); scanf("%d",&x); i=LocateList(L,x); /*顺序表查找*/ if (i==0) printf("sorry,don't find %d!\n\n",x); else printf("i have find the %d,it locate in %d!\n\n",x,i); /*调用插入函数*/ printf(“Insert function:\n”); printf("输入要插入的位置:(input the position:)"); scanf("%d",&i); printf("输入要插入的元素:(input the data:)"); scanf("%d",&x); InsertList(&L,x,i); /*顺序表插入 */ PrintList(L,n); /*打印顺序表 */ /*调用删除函数*/ printf(“delete function:\n”); printf("输入要删除的位置:(input the position:)"); scanf("%d",&i); DeleteList(&L,i); /*顺序表删除 */ PrintList(L,n); /*打印顺序表 */

实验1顺序表和链表基本操作(学生)

实验一线性表运算的实现 班级学号姓名 一、实验预备知识 1.复习C中函数的相关内容。 2.复习如何用主函数将多个函数连在一起构成一个C完整程序。 3.复习多文件结构。 二、实验目的 1.掌握线性表的顺序和链式存储结构 2.熟练运用线性表在顺序存储方式下的初始化、创建、输出、插入和删除运算 3.熟练运用线性表在链式存储方式下的创建、输出、插入和删除运算 三、实验要求 1.编写初始化并创建线性表和输出线性表的算法。 2.编写对线性表插入和删除运算算法,要判断位置的合法性和溢出问题。 3.编写有序表的插入和删除运算算法。 4.编写一个主函数,将上面函数连在一起,构成一个完整的程序。 5.将实验源程序调试并运行,写出输入、输出结果,并对结果进行分析。 四、实验内容 顺序表实验内容: 1.给定的线性表为L=(12,25,7,42,19,38),元素由键盘输入。 2.初始化并建立顺序表。(开辟的存储空间大小为8) 3.编写顺序表输出算法。 4.依次插入3,21,15三个数,分别插入在第4,6和2位置,每插入一次都要输出一次顺序表。 5.删除第5,第3和第12个位置上的元素,每删除一个元素都要输出一次顺序表。 6.编写一个排序算法,对线性表中元素从小到大排列。 7.向有序表分别插入20和50,插入后表仍然有序。(修改开辟的存储空间大小为15) 单链表实验内容: 1.给定的线性表为L=(12,25,7,42,19,38),元素由键盘输入。 2.建立一个带表头结点的单链表(前插入法和尾插入法都可以)。 3.编写单链表输出算法。 4.依次插入3,21,15三个数,分别插入在第4,6和12位置,每插入一次都要输出一次单链表。 5.删除第5,第3和第12个位置上的元素,每删除一个元素都要输出一次单链表。 6.编写一个排序算法,对线性表中元素从小到大排列。 7.分别删除值为25和42的元素,删除后表仍然有序。 五、实验结果 给出程序清单及输入/输出结果 六、总结 1.实验过程中遇到的问题及解决方法 2.收获

实验一.顺序表验证实验

实验一顺序表操作验证 一、实验目的 ⑴掌握线性表的顺序存储结构; ⑵验证顺序表及其基本操作的实现; ⑶掌握数据结构及算法的程序实现的基本方法。 二、实验内容 ⑴建立含有若干个元素的顺序表; ⑵对已建立的顺序表实现插入、删除、查找等基本操作。 三、设计与编码 (a)本实验用到的理论知识 首先定义顺序表的数据类型——顺序表类SeqList,包括题目要求的插入、删除、查找等基本操作,为便于查看操作结果,设计一个输出函数依次输出顺序表的元素。 (b)算法设计 const int MaxSize=10; template //定义模板类SeqList class SeqList { public: SeqList( ){length=0;} //无参构造函数 SeqList(T a[ ], int n);//有参构造函数 void Insert(int i, T x); //在线性表中第i个位置插入值为x的元素 T Delete(int i); //删除线性表的第i个元素 int Locate(T x ); //按值查找,求线性表中值为x的元素序号 void PrintList( ); //遍历线性表,按序号依次输出各元素 private: T data[MaxSize]; //存放数据元素的数组 int length; //线性表的长度 }; 其次,建立含有n个数据元素的顺序表,即设计构造函数。算法如下:

最后,对建立的顺序表设计插入、删除、查找等基本操作的算法。 ⑴插入算法 ⑵删除算法 ⑶查找算法 (c)编码 #include #include using namespace std;

实验一顺序表与链表

实验一顺序表与链表 一、实验目的 1、掌握线性表中元素的前驱、后续的概念。 2、掌握顺序表与链表的建立、插入元素、删除表中某元素的算法。 3、对线性表相应算法的时间复杂度进行分析。 4、理解顺序表、链表数据结构的特点(优缺点)。 二、实验预习 说明以下概念 1、线性表: 2、顺序表: 3、链表: 三、实验容和要求 1、阅读下面程序,在横线处填写函数的基本功能。并运行程序,写出结果。 #include #include #define ERROR 0 #define OK 1 #define INIT_SIZE 5 /*初始分配的顺序表长度*/ #define INCREM 5 /*溢出时,顺序表长度的增量*/ typedef int ElemType; /*定义表元素的类型*/ typedef struct Sqlist{ ElemType *slist; /*存储空间的基地址*/ int length; /*顺序表的当前长度*/ int listsize; /*当前分配的存储空间*/ }Sqlist; int InitList_sq(Sqlist *L); /* 构造一个空的线性表L*/ int CreateList_sq(Sqlist *L,int n); /* 构造顺序表的长度为n */ int ListInsert_sq(Sqlist *L,int i,ElemType e);/* 在L中第i个位置之前插入新的数据元素e,L的长度加1 */ int PrintList_sq(Sqlist *L); /*输出顺序表的元素*/ int ListDelete_sq(Sqlist *L,int i); /*删除第i个元素*/

实验1 顺序表的操作

实验1 顺序表的操作 一、实验要求 1 建立顺序表 2 顺序表的长度并输出顺序表 3 插入元素的位置和元素 4 删除值为x的元素 5 顺序表倒置 6 将顺序表按升序排序 7 将两个顺序有序表A和B合并为一个有序表C 二、源代码 DS.h #include #include #include #include #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 typedef int Status; SqList.h #ifndef SQLIST_H_INCLUDED #define SQLIST_H_INCLUDED #include "DS.h" typedef int ElemType; typedef struct { ElemType *elem; int length; int listsize; }SqList; void menu(); Status InitList_Sq(SqList &L, int n);/*初始化顺序表*/ Status CreateList_Sq(SqList &L);/*建立顺序表*/

void PrintList_Sq(SqList L);/*输出顺序表*/ Status DeleteList_Sq(SqList &L,int i,ElemType &e);/*删除第i个元素*/ Status DeleteListX_Sq(SqList &L,ElemType x);/*删除值为x的元素*/ Status AdjustList_Sq(SqList &L);/*奇数排在偶数之前*/ Status OrderList_sq(SqList &L, int n);/*插入法生成递增有序表*/ void MergeList_Sq(SqList La, SqList Lb, SqList &Lc );/*两个非递减有序表A和B,并把它们合并成一个非递减有序表C*/ #endif // SQLIST_H_INCLUDED SqList.cpp #include "SqList.h" void menu() { printf("\t\t\t 顺序表基本操作\n\n"); printf("\t\t\t1.建立顺序表\n"); printf("\t\t\t2.遍历顺序表\n"); printf("\t\t\t3.删除第i 个元素\n"); printf("\t\t\t4.删除值为x 的元素\n"); printf("\t\t\t5.奇数排在偶数之前\n"); printf("\t\t\t6.插入法生成递增有序表\n"); printf("\t\t\t7.两个非递减有序表La和Lb合并成非递减有序表Lc\n"); printf("\t\t\t0.退出\n\n"); } /*初始化顺序表*/ Status InitList_Sq(SqList &L, int n) { L.elem=(ElemType*)malloc(n*sizeof(ElemType)); if(!L.elem) exit(OVERFLOW); L.length=0; L.listsize=n; return OK; } /*建立顺序表*/ Status CreateList_Sq(SqList &L) { int n, i; printf("请输入顺序表长度:"); scanf("%d", &n); if(InitList_Sq(L, n)) {

数据结构实验1

天津科技大学 2015—2016学年第2学期数据结构实验任务书 课程名称:数据结构实验学时: 2 实验题目:线性表的基本操作 实验环境: Visual C++ 实验目的: 1、掌握线性表的定义; 2、掌握线性表的基本操作,如建立、查找、插入和删除等。 实验内容: 定义一个包含学生信息(学号,姓名,成绩)的顺序表和链表(二选一),使其具有如下功能: (1) 根据指定学生个数,逐个输入学生信息; (2) 逐个显示学生表中所有学生的相关信息; (3) 根据姓名进行查找,返回此学生的学号和成绩; (4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩); (5) 给定一个学生信息,插入到表中指定的位置; (6) 删除指定位置的学生记录; (7) 统计表中学生个数。 实验提示: 学生信息的定义: typedef struct { char no[8]; //8位学号 char name[20]; //姓名 int score; //成绩 }Student; 顺序表的定义 typedef struct { Student *elem; //指向数据元素的基地址 int length; //线性表的当前长度 }SqList; 链表的定义:

typedef struct LNode{ Student data; //数据域 struct LNode *next; //指针域 }LNode,*LinkList; 实验要求: (1) 程序要添加适当的注释,程序的书写要采用缩进格式。 (2) 程序要具在一定的健壮性,即当输入数据非法时,程序也能适当地做出反应,如插入删除时指定的位置不对等等。 (3) 程序要做到界面友好,在程序运行时用户可以根据相应的提示信息进行操作。 (4) 根据实验报告模板详细书写实验报告,在实验报告中给出链表根据姓名进行查找的算法和插入算法的流程图。 (5) 以班为单位实验周周五上传源程序和实验报告。顺序表的源程序保存为SqList.cpp,链表的源程序保存为LinkList.cpp,实验报告命名为:实验报告1.doc。源程序和实验报告压缩为一个文件(如果定义了头文件则一起压缩),按以下方式命名:学号姓名.rar,如07081211薛力.rar。

《数据结构》实验1

实验1: 顺序表的操作实验 一、实验名称和性质 二、实验目的 1.掌握线性表的顺序存储结构的表示和实现方法。 2.掌握顺序表基本操作的算法实现。 3.了解顺序表的应用。 三、实验内容 1.建立顺序表。 2.在顺序表上实现插入、删除和查找操作(验证性内容)。 3.删除有序顺序表中的重复元素(设计性内容)。 4.完成一个简单学生成绩管理系统的设计(应用性设计内容)。 四、实验的软硬件环境要求 硬件环境要求: PC机(单机) 使用的软件名称、版本号以及模块: Windows环境下的VC++6.0 五、知识准备 前期要求熟练掌握了C语言的编程规则、方法和顺序表的基本操作算法。 六、验证性实验 1.实验要求 编程实现如下功能: (1)根据输入顺序表的长度n和各个数据元素值建立一个顺序表,并输出顺序表中各元素值,观察输入的内容与输出的内容是否一致。 (2)在顺序表的第i个元素之前插入一个值为x的元素,并输出插入后的顺序表中各元素值。 (3)删除顺序表中第i个元素,并输出删除后的顺序表中各元素值。 (4)在顺序表中查找值为e的数据元素,如果查找成功,则显示“查找成功”和该元素在顺序表中的位置,否则显示“查找失败”。 2. 实验相关原理: 线性表的顺序存储结构称为顺序表,顺序表的存储结构描述为: #define MAXLEN 30 /*线性表的最大长度*/ typedefstruct { Elemtypeelem[MAXLEN]; /*顺序表中存放元素的数组,其中elemtype为抽象数据类型,在程序

具体实现时可以用任意类型代替*/ int length; /*顺序表的长度,即元素个数*/ }Sqlist; /*顺序表的类型*/ 【核心算法提示】 1.顺序表插入操作的基本步骤:要在顺序表中的第i个数据元素之前插入一个数据元素x,首先要判断插入位置i是否合法,假设线性表的表长为n,则i的合法值范围:1≤i≤n+1,若是合法位置,就再判断顺序表是否满,如果满,则增加空间或结束操作,如果不满,则将第i个数据元素及其之后的所有数据元素都后移一个位置,此时第i个位置已经腾空,再将待插入的数据元素x插入到该位置上,最后将线性表的表长增加1。 2.顺序表删除操作的基本步骤:要删除顺序表中的第i个数据元素,首先仍然要判断i 的合法性,i 的合法范围是1≤i≤n,若是合法位置,则将第i个数据元素之后的所有数据元素都前移一个位置,最后将线性表的表长减1。 3.顺序表查找操作的基本步骤:要在顺序表中查找一个给定值为e的数据元素,则可以采用顺序查找的方法,从顺序表中第1个数据元素开始依次将数据元素值与给定值e进行比较,若相等则查找成功,函数返回该数据元素在顺序表中的位置,若顺序表中所有元素都与给定值e不相片,则查找失败,函数返回0值。 【核心算法描述】 status Sqlist_insert(Sqlist&L,inti,Elemtypex) /*在顺序表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,inti,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 Sqlist_search(SqlistL,Elemtype x) /* 在顺序表中查找值为x的元素,如果找到,则函数返回该元素在顺序表中的位置,否则返回0*/

实验一顺序表

注意事项: 在磁盘上创建一个目录,专门用于存储数据结构实验的程序。因为机房机器有还原卡,请同学们将文件夹建立在最后一个盘中,以学号为文件夹名。 实验一顺序表操作 一、实验目的 1、掌握使用VC++上机调试线性表的基本方法; 2、掌握线性表的基本操作:插入、删除、查找以及线性表合并等运算在顺序存储结构和链接存储结 构上的运算。 二、实验要求 1.认真阅读和掌握本实验的程序。 2.上机运行本程序。 3. 将剩余的操作函数补齐,如删除,判空,有序表的合并,求并集等。 三、实验内容 例:程序1:顺序表基本操作的实现 这个程序中演示了顺序表的创建、插入和查找和合并。 程序如下: #include #include "stdio.h" #include #include #define MAXSIZE 100 typedef int DataType ; //先设定数据元素的类型为整形 //定义顺序表的结构类型 typedef struct { DataType data[MAXSIZE]; int length; } SeqList,* PSeqList; //初始化顺序表 PSeqList Init_SeqList( ){ PSeqList p; p=(PSeqList)malloc(sizeof(SeqList)); if (p) p->length=0; return p; } //销毁顺序表 void Destroy_SeqList(PSeqList *p){ if (*p) free(*p); *p=NULL; }

实验一

源程序 【程序代码】 #include"stdio.h" #define MAXSIZE 100 typedef int datatype; typedef struct {datatype data[MAXSIZE]; int last; }seqlist; /*顺序表类型定义*/ /**********函数声明**********/ void create_seqlist(seqlist *l,int n); void print_seqlist(seqlist l); void insert_seqlist(seqlist *l,int i,datatype x); void delete_seqlist(seqlist *l,int i); int locate_seqlist(seqlist l,datatype x); /**********主函数**********/ void main() {seqlist l;int i; create_seqlist(&l,10); print_seqlist(l); /*第1步*/ insert_seqlist(&l,3,666); print_seqlist(l); /*第2步*/ delete_seqlist(&l,8); print_seqlist(l); /*第3步*/ i=locate_seqlist(l,65); if(i==-1)printf("have not this element\n"); else printf("the location is:%d\n",i+1); /*第4步*/ } /**********子函数**********/ void create_seqlist(seqlist *l,int n)/*输入n个整数,建立一个顺序表L*/ {int i; for(i=0;idata[i]); l->last=n-1; } void print_seqlist(seqlist l)/*输出顺序表L中各元素的值*/ {int i; for(i=0;i<=https://www.doczj.com/doc/214095890.html,st;i++) printf("%5d",l.data[i]); printf("\n"); } void insert_seqlist(seqlist *l,int i,datatype x)/*在顺序表L的第i个位置插入元素x*/ {int j; if(l->last==MAXSIZE-1)

数据结构_实验报告1顺序表

一、抄写自己所选择的题目。

1、已知一顺序表A,其元素非递减有序排列,编写一个算法,删除顺序表中值相同多余的元素(相同值保留一个)。 2、已知带头结点的单链表L中的节点是按整数值递增排序的,试写一算法,将值为x的节点插入到表L中,使得表L仍然有序。分析算法的时间复杂度。 二、写出算法设计思路。 1.建立一个顺序表用于存储一组非递减排序的整形数据,对顺序表中的每个元素与其下一个元素进行比较操作。用指针记录当前所比较的元素,如果相等则对当前指针所指向的元素进行删除操作,并将它后面的数据前移,再与下一个元素比较,如果还相等就继续删除操作,否则指向下个元素,再比较直至无重复的元素。 2. 建立一个带头节点的单链表,其节点按整数值递增排序。创建一个新的节点,并由键盘输入节点的值。将其与链表中原有的节点(头节点不参与比较)按顺序作比较,并用指针指向当前的位置,若不大于当前节点,则在当前位置这前作插入操作,否则在最后作插入操作。 三、编写代码,调试运行,实现题目要求(提示:考虑到插入和删除的位置是否超出范围等可能出现的异常问题)。解1.法I: #include "stdio.h" #include "conio.h" #define SIZE 10 main() { int SqList_A[SIZE]={23,3,45,65,23,44,5,7,89,0}; int i,j,n,m,l=SIZE; for(i=0;i

实验1顺序表的基本操作

实验题目:顺序表的基本操作 一、实验目的 1、掌握线性表的顺序存储实现; 2、掌握在存储体(顺序表)上的基本操作(插入、删除)。 二、实验作业 在给出部分代码的基础上完成: 1.已知元素在顺序表上的插入位置(序号),编写程序完成在顺序表上的插 入功能,将编写好的函数在主函数的调用。 SeqList insertlocal(SeqList L,int i,int x) 2.已知顺序表中删除元素的位置(序号),请编写程序完成在顺序表上的删 除功能,将编写好的函数在主函数的调用。 SeqList deletelocal(SeqList L,int i) 3.创新加分题 两个顺序表L1,L2,它们的元素是整型、无序的,请编写一个函数完成将两个顺序表合并成一个有序的新顺序表。 SeqList hebing(SeqList L1, SeqList L2) 三、实验内容 1、SeqList insertlocal(SeqList L,int i,int x) { int j; int f=0; if(i<=L.length-1) { f=1; for(j=L.length-1;j>=i;j--) L.data[j+1]=L.data[j]; L.data[i]=x; L.length++; } else; if(f==0) printf("sorry"); printf("\n"); return L; } 2、SeqList deletelocal(SeqList L,int i) { int j; int f=0; if(i<=L.length-1) { f=1;

for(j=i+1;j<=L.length-1;j++) L.data[j-1]=L.data[j]; L.length--; } else; if(f==0) printf("sorry"); printf("\n"); return L; } 3、SeqList hebing(SeqList L1, SeqList L2) { SeqList L; int i,j,k,temp; for(i=0;i<=L1.length-1;i++) L.data[i]=L1.data[i]; for(j=0;j<=L2.length-1;j++,i++) L.data[i]=L2.data[j]; L.length=i; for(k=L.length-1;k>0;k--) { for(i=0,temp=L.data[i];i<=k;i++) { if(temp<=L.data[i]) { temp=L.data[i]; j=i; } } L.data[j]=L.data[k]; L.data[k]=temp; } return L; }

实验一顺序表

实验一线性表的应用—顺序表操作 [ 实验日期 ] 2012 年 9 月 21 日 学号:10131504 专业年级:石工1015姓名:于秀玲 一、目的和要求 1.熟悉并掌握线性表的逻辑结构定义、特点。 2.熟悉并掌握顺序表描述方法。 3.熟悉并掌握顺序表的基本操作,包括顺序表的建立与打印,插入与删除数据元素,查找数据元素等。 二、实验内容 (详细说明顺序表操作的各个函数头的说明) 这次实验我编写了顺序表的基本操作程序,里面包括8个子函数,分别是2个顺序表的创建函数、1个输出函数,1个插入函数、2个查找函数、2个删除函数。然后用主函数实现对子函数的调用。 下面对各个函数进行说明: 1、void CreatSListN(SeqList *p )是创建顺序表函数,是已知要输入数据的个数n,在引 导下输入第1、2、3、。。。个数,直到将n个数输完。当顺序表已满或数据溢出 时,程序将给以提醒。适合于数据量小,个数知道的情况,在程序的引导下, 不易出现漏输数据。 2、void CreatSListX(SeqList *p ) 是创建顺序表函数,是数据个数未知时,通过-1作为 结束标志,将数据全部输入的。该函数可以求出输入数据的个数,并判断数据 个数是否合理。适合于数据量大的情况。 3、void PrintList(SeqList *p) 是输出顺序表函数,通过循环实现顺序表的遍历。 4、int InsertSList(SeqList *L ,int i,int x)是插入函数,是在i处插入x,是将i及其后面的 数据从后到前依次后移一位,在将x插入的。 5、int DeleteSListI(SeqList *L,int i)是删除函数,是将某个位置上的数据删除,通过将 该位置以后的数据从前往后依次前移一位实现的。适合于只关注位置,不在乎 数据的情况。 6、void SearchX(SeqList *L,int x)是查找函数,是查找某个数所在的位置。通过循环依 次判断顺序表理的各个元素是否为所查找的,当元素和该数相等时,跳出循环, 输出结果,当遍历了表里的所有数据时还未找到时,程序会提醒顺序表中没有 该数据。如果需要重新输入,通过函数自身的调用可以实现再次查询。 7、int DeleteSListX(SeqList *L,int x)是删除函数,是要删除某个数据,该数据位置未知 时也可以用。是先确定该数所在位置,可以通过循环实现,也可以通过查找函 数void SearchX(SeqList *L,int x) 来确定然后再调用删除函DeleteSListI(SeqList *L,int i)来实现数据的删除。当数据不存在时也可以给予提醒。 8、void SearchI(SeqList *L,int i)是查找函数,查找顺序表某一位置上的数据,位置已确 定直接将数据输出即可。

实验报告01-顺序表的基本操作

实验目的及要求: 了解和掌握顺序表的特点; 掌握顺序表基本操作的实现; 要求完成顺序表的初始化、插入、删除、显示操作的实现。实验设备环境及要求: PC机一台,内存要求128M以上,VC++6.0集成开发环境。实验内容与步骤: 1、在VC++6.0环境中新建一个工程和C++文件; 2、实现顺序表初始化、插入、删除算法,代码如下: #include #include #define MaxSize 100 typedef char ElemType; typedef struct{ ElemType *elem; int length; }SqList; int InitList_Sq(SqList &L){ L.elem = (ElemType *)malloc(MaxSize*sizeof(ElemType)); if(!L.elem) return 0; L.length = 0; return 1; } int ListInsert_Sq(SqList &L,int i,ElemType e){ if(i<1||i>L.length+1) return 0; ElemType *p; ElemType *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 ListDelete_Sq(SqList &L,int i,ElemType &e){ if(i<1||i>L.length) return 0; ElemType *p=&(L.elem[i-1]); e=*p;

相关主题
文本预览
相关文档 最新文档