文档库 最新最全的文档下载
当前位置:文档库 › 实验报告:顺序表

实验报告:顺序表

实验报告:顺序表
实验报告:顺序表

实验报告(实验一)

专业班级姓名学号课程名称

学年学期课程类别

●实验内容:实验时间:年月日

1. 编写函数,输入一组整型元素序列,建立一个顺序表。

2. 编写函数,实现对该顺序表的遍历

3. 编写函数,在顺序表中进行顺序查找某一元素,查找成功则返回其存储位置i,否则

返回错误信息。

4. 编写函数,实现在顺序表的第i个位置上插入一个元素x的算法。

5. 编写函数,实现删除顺序表中第i个元素的算法。

6. 编写利用有序表插入算法建立一个有序表的函数。

7. 编写函数,利用以上算法,建立两个非递减有序表,并把它们合并成一个非递减有序表。

8. 编写函数,实现输入一个元素x,把它插入到有序表中,使顺序表依然有序。

9. 编写一个主函数,在主函数中设计一个简单的菜单,分别调试上述算法。

●实验目的及要求:

1. 掌握顺序表的存储结构形式及其描述

2. 掌握顺序表的建立、查找、插入和删除操作

●方法与步骤:(使用附页填写并附在本页后)

详见源代码。

●小结:

经过这次的实验:

⒈使我更加熟悉顺序表的使用。如:在顺序表中进行顺序查找某一元素;在顺序表的第i个位置插入元素x的算法;删除第i个元素;建立有序表的函数;实现输入一个元素x,把它插入到有序表中,使顺序表依然有序。

⒉让我知道我顺组表的知识非常迷糊,开始时连顺序表也不会,可能是我上课不认真,导致一些基

分数:批阅老师:2012年月日

础也不会,但经过我自己看书,但还是不明白就请教同学,才使者实验能顺利完成。 实验结果:

#include

#include

#define OVERFLOW 0

#define MAXSIZE 100

typedef int ElemType;

typedef struct list

{ElemType elem[MAXSIZE];

int length;

}Sqlist;

void Creatlist(Sqlist &L)

{int i;

printf("请输入顺序表的长度:"); //输入一组整型元素序列,建立一个顺序表。

scanf("%d",&L.length);

for(i=0;i

scanf("%d",&L.elem[i]);

}

void printlist(Sqlist &L) //以输出的形式实现对该顺序表的遍历

{int i;

for(i=0;i

printf("%d ",L.elem[i]);

printf("\n");

}

void Searchlist(Sqlist &L,int x) //在顺序表中进行顺序查找某一元素x,查找成功则返回其存储位置i,否则返回错误信息

{int i,k=-1;

for(i=0;i

if(L.elem[i]==x){

k=i+1;printf("%d ",k);}

if(k==-1)

printf("error!");

printf("\n");

}

void Inseri(Sqlist &L,int i,int x) //在顺序表的第i个位置上插入一个元素x

{int j;

for(j=L.length;j>=i;j--)

L.elem[j]=L.elem[j-1];

L.elem[j]=x;

L.length++;

}

void Delete(Sqlist &L,int i) //删除顺序表中第i个元素

{int j;

for(j=i;j

L.elem[j-1]=L.elem[j];

L.length--;

}

void Insert(Sqlist &L,int x) //输入一个元素x,把它插入到有序表中,使顺序表依然有序。{int i,j;

if(L.length==MAXSIZE) exit(OVERFLOW); //表满,不能插入

for(i=1;i<=L.length&&L.elem[i-1]<=x;i++);

for(j=L.length;j>=i;j--)

L.elem[j]=L.elem[j-1];

L.elem[i-1]=x;

L.length++;

}

void Creatlist_sorted(Sqlist &L) //利用有序表插入算法建立一个有序表

{int i,num;

ElemType x;

L.length=0;

printf("请输入顺序表的长度:");

scanf("%d",&num);

for(i=1;i<=num;i++)

{

scanf("%d",&x);

Insert(L,x);

}

}

void Merger(Sqlist &p,Sqlist &r,Sqlist &c) //建立两个非递减有序表,并把它们合并成一个非递减有序表

{

ElemType *a,*b,i=0,j=0,k=0;

a=&p.elem[0];

b=&r.elem[0];

c.length=p.length+r.length;

while(i

{if(*a>=*b)

{c.elem[k]=*b;b++;k++;j++;}

else {c.elem[k]=*a;a++;k++;i++;}

}

if(j==r.length)

for(;k

{c.elem[k]=*a;a++; }

else if(i==p.length)

for(;k

{c.elem[k]=*b;b++;}

}

void main()

{Sqlist L,M,N;

int x,i,n;

printf("1.建立一个顺序表.\n");

printf("2.以输出的形式对该顺序表遍历.\n");

printf("3.在顺序表中进行顺序查找某一元素x.\n");

printf("4.在顺序表的第i个位置上插入一个元素x.\n");

printf("5.删除顺序表中第i个元素.\n");

printf("6.利用有序表插入算法建立一个有序表.\n");

printf("7.建立两个非递减有序表,并把它们合并成一个非递减有序表.\n"); printf("8.输入一个元素x,把它插入到有序表中,使顺序表依然有序.\n"); while(1){

printf("请选择:");

scanf("%d",&n);

switch(n)

{case 1:Creatlist(L);break;

case 2:printlist(L);break;

case 3:printf("请输入要查找的元素x:");

scanf("%d",&x);

Searchlist(L,x);break;

case 4:printf("请输入要插入的位置i:");

scanf("%d",&i);

if(i<1||i>L.length+1){

printf("error!\n");break;}

printf("请输入要插入的值x:");

scanf("%d",&x);

Inseri(L,i,x);

printlist(L);break;

case 5:printf("请输入要删去的元素的位置i:");

scanf("%d",&i);

if(i<1||i>L.length){

printf("error!\n");break;}

Delete(L,i);

printlist(L);break;

case 6:Creatlist_sorted(L);

printlist(L);break;

case 7:Creatlist_sorted(L);

Creatlist_sorted(M);

Merger(L,M,N);

printlist(N);break;

case 8:Creatlist_sorted(L);

printf("请输入要插入的元素x:");

scanf("%d",&x);

Insert(L,x);

printlist(L);break;

}

}

}

链表实验报告

C语言程序设计实验报告 实验一:链表的基本操作一·实验目的 1.掌握链表的建立方法 2.掌握链表中节点的查找与删除 3.掌握输出链表节点的方法 4.掌握链表节点排序的一种方法 5.掌握C语言创建菜单的方法 6.掌握结构化程序设计的方法 二·实验环境 1.硬件环境:当前所有电脑硬件环境均支持 2.软件环境:Visual C++6.0 三.函数功能 1. CreateList // 声明创建链表函数 2.TraverseList // 声明遍历链表函数 3. InsertList // 声明链表插入函数 4.DeleteTheList // 声明删除整个链表函数 5. FindList // 声明链表查询函数 四.程序流程图 五.程序代码 #include #include typedef int Elemtype; typedef int Status; typedef struct node//定义存储节点 { int data;//数据域 struct node *next;//结构体指针 } *linklist,node;//结构体变量,结构体名称 linklist creat (int n)//创建单链表 { linklist head,r,p;//定义头指针r,p,指针 int x,i; head=(node *)malloc(sizeof(node));//生成头结点

r=head;//r指向头结点 printf("输入数字:\n"); for(i=n;i>0;i--)//for 循环用于生成第一个节点并读入数据{ scanf("%d",&x); p=(node *)malloc(sizeof(node)); p->data=x;//读入第一个节点的数据 r->next=p;//把第一个节点连在头结点的后面 r=p;//循环以便于生成第二个节点 } r->next=0;//生成链表后的断开符 return head;//返回头指针 } void output (linklist head)//输出链表 { linklist p; p=head->next; do { printf("%3d",p->data); p=p->next; } while(p); printf("\n") } Status insert ( linklist &l,int i, Elemtype e)//插入操作 { int j=0; linklist p=l,s; while(jnext; ++j; } if(!p || j>i-1) return -1; else { s=(node *)malloc(sizeof(node)); s->data=e; s->next=p->next; p->next=s; return 1; } } Status delect ( linklist &l,int i, Elemtype &e)//删除操作 { int j=0; linklist p=l,q; while(jnext) { p=p->next; ++j; } if(!p->next || j>i-1) return -1;

单链表实验报告

计算机与信息技术学院综合性、设计性实验报告 一、实验目的 (1)熟悉顺序表的创建、取值、查找、插入、删除等算法,模块化程序设计方法。 二、实验仪器或设备 (1)硬件设备:CPU为Pentium 4 以上的计算机,内存2G以上 (2)配置软件:Microsoft Windows 7 与VC++6.0 三、总体设计(设计原理、设计方案及流程等) 设计原理: 单链表属于线性表,线性表的存储结构的特点是:用一组任意存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的。因此,对于某个元素来说,不仅需要存储其本身的信息,还需要存储一个指示其直接后继的信息。 设计方案: 采用模块化设计的方法,设计各个程序段,最终通过主函数实现各个程序段的功能。设计时,需要考虑用户输入非法数值,所以要在程序中写入说可以处理非法数值的代码。 设计流程: 1. 引入所需的头文件; 2. 定义状态值; 3. 写入顺序表的各种操作的代码; 写入主函数,分别调用各个函数。在调用函数时,采用if结构进行判断输 入值是否非法,从而执行相应的程序 四、实验步骤(包括主要步骤、代码分析等) #include // EOF(=A Z 或F6),NULL #in clude // srand( ) ,rand( ),exit (n) #in clude // malloc( ),alloc( ),realloc() 等 #in clude // INT_MAX 等 #in clude #in clude #in clude // floor(),ceil( ),abs() #in clude // cout,ci n #in clude // clock( ),CLK_TCK,clock_t #defi ne TRUE 1 #defi ne FALSE 0 #defi ne OK 1 #defi ne ERROR 0 #defi ne INFEASIBLE -1

C语言数据结构线性表的基本操作实验报告

实验一线性表的基本操作 一、实验目的与基本要求 1.掌握数据结构中的一些基本概念。数据、数据项、数据元素、数据类型和数据结构,以及它们之间的关系。 2.了解数据的逻辑结构和数据的存储结构之间的区别与联系;数据的运算与数据的逻辑结构的关系。 3.掌握顺序表和链表的基本操作:插入、删除、查找以及表的合并等运算。4.掌握运用C语言上机调试线性表的基本方法。 二、实验条件 1.硬件:一台微机 2.软件:操作系统和C语言系统 三、实验方法 确定存储结构后,上机调试实现线性表的基本运算。 四、实验内容 1.建立顺序表,基本操作包括:初始化,建立一个顺序存储的链表,输出顺序表,判断是否为空,取表中第i个元素,定位函数(返回第一个与x相等的元素位置),插入,删除。 2.建立单链表,基本操作包括:初始化,建立一个链式存储的链表,输出顺序表,判断是否为空,取表中第i个元素,定位函数(返回第一个与x相等的元素位置),插入,删除。 3.假设有两个按数据元素值非递减有序排列的线性表A和B,均以顺序表作为存储结构。编写算法将A表和B表归并成一个按元素值非递增有序(允许值相同)排列的线性表C。(可以利用将B中元素插入A中,或新建C表)4.假设有两个按数据元素值非递减有序排列的线性表A和B,均以单链表作为存储结构。编写算法将A表和B表归并成一个按元素值递减有序(即非递增有序,允许值相同)排列的线性表C。 五、附源程序及算法程序流程图 1.源程序 (1)源程序(实验要求1和3) #include #include #include #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 typedef struct arr {

单链表的插入和删除实验报告

. 实验一、单链表的插入和删除 一、目的 了解和掌握线性表的逻辑结构和链式存储结构,掌握单链表的基本算法及相关的时间性能分析。 二、要求: 建立一个数据域定义为字符串的单链表,在链表中不允许有重复的字符串;根据输入的字符串,先找到相应的结点,后删除之。 三、程序源代码 #include"stdio.h" #include"string.h" #include"stdlib.h" #include"ctype.h" typedef struct node //定义结点 { char data[10]; //结点的数据域为字符串 struct node *next; //结点的指针域 }ListNode; typedef ListNode * LinkList; // 自定义LinkList单链表类型 LinkList CreatListR1(); //函数,用尾插入法建立带头结点的单链表

ListNode *LocateNode(); //函数,按值查找结点 void DeleteList(); //函数,删除指定值的结点void printlist(); //函数,打印链表中的所有值 void DeleteAll(); //函数,删除所有结点,释放内存 //==========主函数============== void main() { char ch[10],num[10]; LinkList head; head=CreatListR1(); //用尾插入法建立单链表,返回头指针printlist(head); //遍历链表输出其值 printf(" Delete node (y/n):");//输入“y”或“n”去选择是否删除结点scanf("%s",num); if(strcmp(num,"y")==0 || strcmp(num,"Y")==0){ printf("Please input Delete_data:"); scanf("%s",ch); //输入要删除的字符串 DeleteList(head,ch); printlist(head); } DeleteAll(head); //删除所有结点,释放内存 } //==========用尾插入法建立带头结点的单链表

1.C语言顺序表实验报告

实验报告要求 一、实验目的 二、实验内容 三、程序流程图 四、实验结果(要求检测所有情况的正确性,写出测试条件及相应的测试结果) 五、完成思考题 实验一顺序表的基本操作(2学时) 一、实验目的 了解顺序表的逻辑特征,掌握顺序表的描述方法、特点及有关的概念,掌握顺序表上的插入和删除等基本操作算法。 二、实验内容 在顺序表List []中,实现顺序表的基本操作,包括:初始化顺序表,在表中插入元素、删除元素。 基本要求: (1)顺序表的元素个数可随意设定; (2)可连续测试任意多个元素的插入、删除,(插 入、删除位置及要插入元素数值均从键盘输入); (3)任一操作结束后将顺序表中的内容输出; (4)可由用户选择退出程序。 三、实验要点及说明 顺序表又称为线性表的顺序存储结构,它是用一组地址连续的存储单元依次存放线性表的各个元素。 可按如下格式定义顺序表: #define MAXLEN 50 /* 定义顺序表最大元素个数50 */ typedef struct{ datatype List[MAXLEN];/* 定义顺序表List */ int Num; /* 定义顺序表表长*/ }Seqlist; 模块划分:(1)initiq( )函数:初始化顺序表 (2)insertq( )函数:实现插入功能 (3)deleteq( )函数:实现删除功能 (4)print( )函数:实现输出功能 四、参考源程序 #include #define MAXLEN 50 typedef int datatype; typedef struct{ datatype List[MAXLEN]; int Num; }Seqlist; void initiq(Seqlist *la ); int insertq(Seqlist *la,int n);

数据结构实验一题目一线性表实验报告

北京邮电大学电信工程学院 数据结构实验报告 实验名称:实验1——线性表 学生姓名: 班级: 班内序号: 学号: 日期: 1.实验要求 1、实验目的:熟悉C++语言的基本编程方法,掌握集成编译环境的调试方法 学习指针、模板类、异常处理的使用 掌握线性表的操作的实现方法 学习使用线性表解决实际问题的能力 2、实验内容: 题目1: 线性表的基本功能: 1、构造:使用头插法、尾插法两种方法 2、插入:要求建立的链表按照关键字从小到大有序 3、删除 4、查找 5、获取链表长度 6、销毁 7、其他:可自行定义 编写测试main()函数测试线性表的正确性。 2. 程序分析 2.1 存储结构 带头结点的单链表

2.2 关键算法分析 1.头插法 a、伪代码实现:在堆中建立新结点 将x写入到新结点的数据域 修改新结点的指针域 修改头结点的指针域,将新结点加入链表中b、代码实现: Linklist::Linklist(int a[],int n)//头插法 {front=new Node; front->next=NULL; for(int i=n-1;i>=0;i--) {Node*s=new Node; s->data=a[i]; s->next=front->next; front->next=s; } } 2、尾插法

a、伪代码实现:a.在堆中建立新结点 b.将a[i]写入到新结点的数据域 c.将新结点加入到链表中 d.修改修改尾指针 b、代码实现: Linklist::Linklist(int a[],int n,int m)//尾插法 {front=new Node; Node*r=front; for(int i=0;idata=a[i]; r->next=s; r=s; } r->next=NULL; } 时间复杂度:O(n) 3、按位查找 a、伪代码实现: 初始化工作指针p和计数器j,p指向第一个结点,j=1 循环以下操作,直到p为空或者j等于1 b1:p指向下一个结点 b2:j加1 若p为空,说明第i个元素不存在,抛出异常 否则,说明p指向的元素就是所查找的元素,返回元素地址 b、代码实现 Node* Linklist::Get(int i)//得到指向第i个数的指针 {Node*p=front->next; int j=1; while(p&&j!=i)//p非空且j不等于i,指针后移 {p=p->next; j++;

实验报告一顺序表的操作

《数据结构》实验报告一 系别:班级: 学号:姓名: 日期:指导教师: 一、上机实验的问题和要求: 顺序表的查找、插入与删除。设计算法,实现线性结构上的顺序表的产生以及元素的查找、插入与删除。具体实现要求: 从键盘输入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.线性表基本操作; 2.处理约瑟夫环问题 二.试验目的: 1.熟悉C语言的上机环境,掌握C语言的基本结构。 2.定义单链表的结点类型。 3.熟悉对单链表的一些基本操作和具体的函数定义。 4.通过单链表的定义掌握线性表的链式存储结构的特点。 5.熟悉对单链表的一些其它操作。 三.实验内容 1.编制一个演示单链表初始化、建立、遍历、求长度、查询、插入、删除等操作的程序。 2.编制一个能求解除约瑟夫环问题答案的程序。 实验一线性表表的基本操作问题描述: 1. 实现单链表的定义和基本操作。该程序包括单链表结构类型以及对单链表操作 的具体的函数定义 程序中的单链表(带头结点)结点为结构类型,结点值为整型。 /* 定义DataType为int类型*/ typedef int DataType; /* 单链表的结点类型*/ typedef struct LNode {DataType data; struct LNode *next; }LNode,*LinkedList; LinkedList LinkedListInit() //初始化单链表 void LinkedListClear(LinkedList L) //清空单链表 int LinkedListEmpty(LinkedList L)//检查单链表是否为空 void LinkedListTraverse(LinkedList L)//遍历单链表 int LinkedListLength(LinkedList L)//求单链表的长度 /* 从单链表表中查找元素*/ LinkedList LinkedListGet(LinkedList L,int i) /* 从单链表表中查找与给定元素值相同的元素在链表中的位置*/ int LinkedListLocate(LinkedList L, DataType x) void LinkedListInsert(LinkedList L,int i,DataType x) //向单链表中插入元素 /* 从单链表中删除元素*/ void LinkedListDel(LinkedList L,DataType x)

数据结构- 顺序表的基本操作的实现-课程设计-实验报告

顺序表的基本操作的实现 一、实验目的 1、掌握使用VC++上机调试顺序表的基本方法; 2、掌握顺序表的基本操作:建立、插入、删除等运算。 二、实验仪器 安装VC++软件的计算机。 三、实验原理 利用线性表的特性以及顺序存储结构特点对线性表进行相关的基本操作四、实验内容 程序中演示了顺序表的创建、插入和删除。 程序如下: #include #include /*顺序表的定义:*/ #define ListSize 100 typedef struct { int data[ListSize]; /*向量data用于存放表结点*/ i nt length; /*当前的表长度*/ }SeqList; void main() { void CreateList(SeqList *L,int n); v oid PrintList(SeqList *L,int n); i nt LocateList(SeqList *L,int x); v oid InsertList(SeqList *L,int x,int i); v oid DeleteList(SeqList *L,int i); SeqList L;

i nt i,x; i nt n=10; L.length=0; c lrscr(); C reateList(&L,n); /*建立顺序表*/ P rintList(&L,n); /*打印建立后的顺序表*/ p rintf("INPUT THE RESEARCH ELEMENT"); s canf("%d",&x); i=LocateList(&L,x); p rintf("the research position is %d\n",i); /*顺序表查找*/ p rintf("input the position of insert:\n"); s canf("%d",&i); p rintf("input the value of insert\n"); s canf("%d",&x); I nsertList(&L,x,i); /*顺序表插入*/ P rintList(&L,n); /*打印插入后的顺序表*/ p rintf("input the position of delete\n"); s canf("%d",&i); D eleteList(&L,i); /*顺序表删除*/ P rintList(&L,n); /*打印删除后的顺序表*/ g etchar(); } /*顺序表的建立:*/ void CreateList(SeqList *L,int n) {int i; printf("please input n numbers\n"); for(i=1;i<=n;i++) scanf("%d",&L->data[i]); L->length=n;

单链表实验报告

数据结构 课程设计 设计题目:单链表 专业班级:11软会四班 指导教师:吉宝玉 日期:2012 目录 一、实验目的 (2) 1、 (2) 2、 (2) 二、实验内容 (3)

三、实验基本要求(软、硬件) (3) 四、算法设计思想 (3) 1、 (3) 2、 (3) 3、 (3) 4、 (3) 5、 (3) 6、 (3) 7、 (3) 8、 (3) 五、算法流程图 (4) 六、算法源代码 (4) 七、运行结果 (9) 1、 (9) 2、 (10) 3、 (11) 4、 (11) 5、 (11) 6、 (12) 7、 (12) 8、 (13) 9、 (13) 八、收获及体会 (14) 一、实验目的 1、理解并掌握单链表的结构特点和相关概念; 2、学会单链表的基本操作:建立、插入、删除、查找、 输入、撤销、逆置、求前驱和后继等并实现其算法。

二、实验内容 利用头插建立一个带头结点的单链表,并用算法实现该单链表的插入、删除查找、输出、求前驱和后继、再把此单链表逆置,然后在屏幕上显示每次操作的结果当所有操作完成后能撤销该单链表。 三、实验基本要求(软、硬件) 用VC++6.0软件平台,操作系统:Windows XP 硬件:内存要求:内存大小在256MB,其他配置一般就行。 四、算法设计思想 1、定义一个创建链表的函数,通过该函数可以创建一个链表,并为下面的函数应用做 好准备。 2、定义输出链表的算法,通过对第一步已经定义好的创建链表函数的调用,在这一步 通过调用输出链表的函数算法来实现对链表的输出操作。 3、定义一个遍历查找的算法,通过此算法可以查找到链表中的每一个节点是否存在。 4、定义查找链表的每一个前驱和后继,通过定义这个算法,可以很容易的实现对链表 的前驱和后继的查找工作。 5、定义插入节点的算法,通过定义这个算法,并结合这查找前驱和后继的算法便可以 在连链表的任意位置进行插入一个新节点。 6、定义删除节点的操作,这个算法用于对链表中某个多余节点的删除工作。 7、定义一个逆置单链表的操作,通过定义这个算法,可以逆置输出单链表。 8、定义一个撤销链表的算法,这个算法用于删除单链表中的所有节点,使链表为空。

数据结构线性表实验报告

实验报告 实验一线性表 实验目的: 1.理解线性表的逻辑结构特性; 2.熟练掌握线性表的顺序存储结构的描述方法,以及在该存储结构下的基本操作;并能灵活运用; 3.熟练掌握线性表的链表存储结构的描述方法,以及在该存储结构下的基本操作;并能灵活运用; 4.掌握双向链表和循环链表的的描述方法,以及在该存储结构下的基本操作。 实验原理: 线性表顺序存储结构下的基本算法; 线性表链式存储结构下的基本算法; 实验内容: 2-21设计单循环链表,要求: (1)单循环链表抽象数据类型包括初始化操作、求数据元素个数操作、插入操作、删除操作、取消数据元素操作和判非空操作。 (2)设计一个测试主函数,实际运行验证所设计单循环链表的正确性。 2-22 .设计一个有序顺序表,要求: (1)有序顺序表的操作集合有如下操作:初始化、求数据元素个数、插入、删除和取数据元素。有序顺序表与顺序表的主要区别是:有序顺序表中的数据元素按数据元素值非递减有序。 (2)设计一个测试主函数,实际运行验证所设计有序顺序表的正确性。 (3)设计合并函数ListMerge(L1,L2,L3),功能是把有序顺序表L1和L2中的数据元素合并到L3,要求L3中的数据元素依然保持有序。并设计一个主函数,验证该合并函数的正确性。 程序代码: 2-21(1)头文件LinList.h如下: typedef struct node { DataType data; struct node *next; }SLNode; /*(1)初始化ListInitiate(SLNode * * head)*/ void ListInitiate(SLNode * * head) { /*如果有内存空间,申请头结点空间并使头指针head指向头结点*/ if((*head=(SLNode *)malloc(sizeof(SLNode)))==NULL)exit(1);

顺序表实验报告

嘉应学院计算机学院 实验报告 课程名称数据结构实验名称线性表实验地点锡科405 指导老师巫喜红实验时间第2-3周提交时间第3周 班级1303班姓名魏振辉学号131110108 一、实验目的和要求 编写一个程序algo2-1.cpp,实现顺序表的各种基本运算 二、实验环境、内容和方法 实验内容: 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。 实验环境:Windows xp Visual C++6.0 三、实验过程描述 (详见本文件夹) 四、结果分析 运行结果如下图所示: 初始化线性表,先定义一个变量num,用while循环配合switch语句的使用来达到在未选择退出即num不等

时一直提示操作的效果,每执行一次操都会先运行fflush(stdin)函数来清除缓存区,避免下次操作受到干扰; 1、往线性表里插入元素,位置和元素用空格隔开; 2、查询线性表是否为空 3、输出顺序表 4、查询线性表长度

5、查询某位置的元素。执行查询操作时先用if语句判断查询元素的函数LocateElem(L,e)返回的值来执行不的操作,当返回的值为0时则所查元素不在线性表中; 6、查询木元素的位置。用if语句判断是否正确输入; 7、删除某元素。 8、释放顺序表 9、退出。用if语句每次执行操作时都判断一次指令是否正确。 五、实验总结

数据结构实验报告 - 答案汇总

数据结构(C语言版) 实验报告

专业班级学号姓名 实验1 实验题目:单链表的插入和删除 实验目的: 了解和掌握线性表的逻辑结构和链式存储结构,掌握单链表的基本算法及相关的时间性能分析。 实验要求: 建立一个数据域定义为字符串的单链表,在链表中不允许有重复的字符串;根据输入的字符串,先找到相应的结点,后删除之。 实验主要步骤: 1、分析、理解给出的示例程序。 2、调试程序,并设计输入数据(如:bat,cat,eat,fat,hat,jat,lat,mat,#),测试程序 的如下功能:不允许重复字符串的插入;根据输入的字符串,找到相应的结点并删除。 3、修改程序: (1)增加插入结点的功能。 (2)将建立链表的方法改为头插入法。 程序代码: #include"stdio.h" #include"string.h" #include"stdlib.h" #include"ctype.h" typedef struct node //定义结点 { char data[10]; //结点的数据域为字符串 struct node *next; //结点的指针域 }ListNode; typedef ListNode * LinkList; // 自定义LinkList单链表类型 LinkList CreatListR1(); //函数,用尾插入法建立带头结点的单链表 LinkList CreatList(void); //函数,用头插入法建立带头结点的单链表 ListNode *LocateNode(); //函数,按值查找结点 void DeleteList(); //函数,删除指定值的结点 void printlist(); //函数,打印链表中的所有值 void DeleteAll(); //函数,删除所有结点,释放内存

线性表的基本操作实验报告

实验一:线性表的基本操作 【实验目的】 学习掌握线性表的顺序存储结构、链式存储结构的设计与操作。对顺序表建立、插入、删除的基本操作,对单链表建立、插入、删除的基本操作算法。 【实验内容】 1.顺序表的实践 1) 建立4个元素的顺序表s=sqlist[]={1,2,3,4,5},实现顺序表建立 的基本操作。 2) 在sqlist []={1,2,3,4,5}的元素4和5之间插入一个元素9,实现 顺序表插入的基本操作。 3) 在sqlist []={1,2,3,4,9,5}中删除指定位置(i=5)上的元素9, 实现顺序表的删除的基本操作。 2.单链表的实践 3.1) 建立一个包括头结点和4个结点的(5,4,2,1)的单链表,实现单链 表建立的基本操作。 2) 将该单链表的所有元素显示出来。 3) 在已建好的单链表中的指定位置(i=3)插入一个结点3,实现单链表插 入的基本操作。 4) 在一个包括头结点和5个结点的(5,4,3,2,1)的单链表的指定位置 (如i=2)删除一个结点,实现单链表删除的基本操作。 5) 实现单链表的求表长操作。 【实验步骤】 1.打开VC++。 2.建立工程:点File->New,选Project标签,在列表中选Win32 Console Application,再在右边的框里为工程起好名字,选好路径,点OK->finish。至此工程建立完毕。 3.创建源文件或头文件:点File->New,选File标签,在列表里选C++ Source File。给文件起好名字,选好路径,点OK。至此一个源文件就被添加到了刚创

建的工程之中。 4.写好代码 5.编译->链接->调试 1、#include "stdio.h" #include "malloc.h" #define OK 1 #define OVERFLOW -2 #define ERROR 0 #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 typedef int ElemType; typedef int Status; typedef struct { ElemType *elem; int length; int listsize; } SqList; Status InitList( SqList &L ) { int i,n; L.elem = (ElemType*) malloc (LIST_INIT_SIZE*sizeof (ElemType)); if (!L.elem) return(OVERFLOW); printf("输入元素的个数:"); scanf("%d",&n); printf("输入各元素的值:"); for(i=0;i

C语言链表实验报告

链表实验报告 一、实验名称 链表操作的实现--学生信息库的构建 二、实验目的 (1)理解单链表的存储结构及基本操作的定义 (2)掌握单链表存储基本操作 (3)学会设计实验数据验证程序 【实验仪器及环境】计算机 Window XP操作系统 三、实验内容 1、建立一个学生成绩信息(学号,姓名,成绩)的单链表,按学号排序 2、对链表进行插入、删除、遍历、修改操作。 3、对链表进行读取(读文件)、存储(写文件) 四、实验要求 (1)给出终结报告(包括设计过程,程序)-打印版 (2)对程序进行答辩

五、实验过程、详细内容 1、概念及过程中需要调用的函数 (1)链表的概念结点定义 结构的递归定义 struct stud_node{ int num; char name[20]; int score; struct stud_node *next; }; (2)链表的建立 1、手动输入 struct stud_node*Create_Stu_Doc() { struct stud_node *head,*p; int num,score; char name[20]; int size=sizeof(struct stud_node); 【链表建立流程图】

2、从文件中直接获取 先建立一个 (3)链表的遍历 (4 )插入结点 (5)删除结点 (6)动态储存分配函数malloc () void *malloc(unsigned size) ①在内存的动态存储区中分配一连续空间,其长度为size ②若申请成功,则返回一个指向所分配内存空间的起始地址的指针 ③若申请不成功,则返回NULL (值为0) ④返回值类型:(void *) ·通用指针的一个重要用途 ·将malloc 的返回值转换到特定指针类型,赋给一个指针 【链表建立流程图】 ptr ptr ptr->num ptr->score ptr=ptr->next head pt r s s->next = ptr->next ptr->next = s 先连后断 ptr2=ptr1->next ptr1->next=ptr2->next free (ptr2)

顺序表的查找、插入与删除实验报告

《数据结构》实验报告一 学院:班级: 学号:姓名: 日期:程序名 一、上机实验的问题和要求: 顺序表的查找、插入与删除。设计算法,实现线性结构上的顺序表的产生以及元素的查找、插入与删除。具体实现要求: 1.从键盘输入10个整数,产生顺序表,并输入结点值。 2.从键盘输入1个整数,在顺序表中查找该结点的位置。若找到,输出结点的位置;若找 不到,则显示“找不到”。 3.从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插 入在对应位置上,输出顺序表所有结点值,观察输出结果。 4.从键盘输入1个整数,表示欲删除结点的位置,输出顺序表所有结点值,观察输出结果。 二、源程序及注释: #include #include /*顺序表的定义:*/ #include #define ListSize 100 /*表空间大小可根据实际需要而定,这里假设为100*/ typedef int DataType; /*DataType可以是任何相应的数据类型如int, float或char*/ typedef struct { DataType data[ListSize]; /*向量data用于存放表结点*/ int length; /*当前的表长度*/ }SeqList; void main() { SeqList L; int i,x; int n=10; /*欲建立的顺序表长度*/ L.length=0; void CreateList(SeqList *L,int n); void PrintList(SeqList L,int n); int LocateList(SeqList L,DataType x); void InsertList(SeqList *L,DataType x,int i); void DeleteList(SeqList *L,int i);

实验报告二:线性表及其基本操作实验(2学时)

实验报告 实验二线性表及其基本操作实验(2学时) 实验目的: (1) 熟练掌握线性表ADT和相关算法描述、基本程序实现结构; (2) 以线性表的基本操作为基础实现相应的程序; (3) 掌握线性表的顺序存储结构和动态存储结构之区分。 实验内容:(类C算法的程序实现,任选其一。具体要求参见教学实验大纲) (1)一元多项式运算的C语言程序实现(加法必做,其它选做); (2) 有序表的合并; (3)集合的并、交、补运算; (4)约瑟夫问题的求解。 注:存储结构可以选用静态数组、动态数组、静态链表或动态链表之一。对链表也可以采用循环链表(含单向或双向)。 实验准备: 1) 计算机设备;2) 程序调试环境的准备,如TC环境;3)实验内容的算法分析与代码设计与分析准备。 实验步骤: 1.录入程序代码并进行调试和算法分析; 2.编写实验报告。 实验过程:(一元多项式的加法) 【算法描述】 定义两个指针qa和qb,分别指向多项式A和多项式B当前进行比较的某个结点,然后比较2个结点中的指数项,则有以下三种结果: 1、指针qa所指结点的指数值小于指针qb所指结点的指数值,则应摘取指针qa 所指的结点插入到“和多项式”链表当中去; 2、指针qa所指结点的指数值大于指针qb所指结点的指数值,则应摘取指针qb 所指的结点插入到“和多项式”链表当中去; 3、指针qa所指结点的指数值等于指针qb所指结点的指数值,则将两个结点的系数相加,若和数不等于零,则修改qa所指结点的系数值,同时释放qb所指结点。反之,从多项式A的链表删除相应结点,并释放指针qa和qb所指结点。【源程序】 #include #include typedef struct { float coef;

链表基本操作实验报告

实验2 链表基本操作实验 一、实验目的 1.定义单链表的结点类型。 2.熟悉对单链表的一些基本操作和具体的函数定义。 3.通过单链表的定义掌握线性表的链式存储结构的特点。 二、实验内容与要求 该程序的功能是实现单链表的定义和主要操作。如:单链表建立、输出、插入、删除、查找等操作。该程序包括单链表结构类型以及对单链表操作的具体的函数定义和主函数。程序中的单链表(带头结点)结点为结构类型,结点值为整型。 要求: 同学们可参考指导书实验2程序、教材算法及其他资料编程实现单链表相关操作。必须包括单链表创建、输出、插入、删除操作,其他操作根据个人情况增减。 三、算法分析与设计。 1.创建单链表: 头结点L

...... 2.单链表插入

s s->data=x; s->next=p->next; p->next=s; 3.单链表的删除: p->next=p->next->next;

四、运行结果 1.单链表初始化 2.创建单链表 3.求链表长度 4.检查链表是否为空 5.遍历链表 6.从链表中查找元素 7.从链表中查找与给定元素值相同的元素在顺序表中的位置

8.向链表中插入元素 插入元素之后的链表 9.从链表中删除元素 删除位置为6的元素(是3) 10.清空单链表 五、实验体会 经过这次单链表基本操作实验,自己的编程能力有了进一步的提高,认识到自己以前在思考一个问题上思路不够开阔,不能灵活的表达出自己的想法,虽然在打完源代码之后出现了一些错误,但是经过认真查找、修改,最终将错误一一修正,主要是在写算法分析的时候出现了障碍,经过从网上查找资料,自己也对程

顺序表的应用数据结构实验报告记录

顺序表的应用数据结构实验报告记录

————————————————————————————————作者:————————————————————————————————日期:

大学数据结构实验报告 课程名称数据结构实验第(三)次实验实验名称顺序表的应用 学生姓名于歌专业班级学号 实验成绩指导老师(签名)日期2018年9月30日一、实验目的 1.学会定义线性表的顺序存储类型,实现C程序的基本结构,对线性表的一些基本操作和具体的函数定义。 2.掌握顺序表的基本操作,实现顺序表的插入、删除、查找以及求并集等运算。 3.掌握对多函数程序的输入、编辑、调试和运行过程。 二、实验要求 1.预习C语言中结构体的定义与基本操作方法。 2.对顺序表的每个基本操作用单独的函数实现。 3.编写完整程序完成下面的实验内容并上机运行。 4.整理并上交实验报告。 三、实验内容: 1.定义一个包含学生信息(学号,姓名,成绩)的顺序表,使其具有如下功能: (1)根据指定学生个数,逐个输入学生信息 (2)逐个显示学生表中所有学生的相关信息 (3)根据姓名进行查找,返回此学生的学号和成绩 (4)根据指定的位置可返回相应的学生信息(学号,姓名,成绩) (5)给定一个学生信息,插入到表中指定的位置 (6)删除指定位置的学生记录 (7)统计表中学生个数 四、实验设计 1.定义一个包含学生信息(学号,姓名,成绩)的顺序表,使其具有如下功能: (1)根据指定学生个数,逐个输入学生信息 for(count=0; count

线性表逆置(顺序表)实验报告

实验一:线性表逆置(顺序表)实验报告 (一)问题的描述: 实现顺序表的逆置算法 (二)数据结构的设计: 顺序表是线性表的顺序存储形式,因此设计如下数据类型表示线性表: typedef struct { ElemType *elem; /* 存储空间基址*/ int length; /* 当前长度*/ int listsize; /* 当前分配的存储容量(以sizeof(ElemType)为单位) */ }SqList; (三)函数功能、参数说明及概要设计: 1.函数Status InitList(SqList *L) 功能说明:实现顺序表L的初始化 算法设计:为顺序表分配一块大小为LIST_INIT_SIZE的储存空间 2.函数int ListLength(SqList L) 功能说明:返回顺序表L长度 算法设计:返回顺序表中的length变量 3.函数Status ListInsert(SqList *L,int i,ElemType e) 功能说明:将元素e插入到顺序表L中的第i个节点 算法设计:判断顺序表是否已满,已满则加空间,未满则继续,将元素e插入到第i个元素之前,并将后面的元素依次往后移 4.函数Status ListTraverse(SqList L,void(*vi)(ElemType*)) 功能说明:依次对L的每个数据元素调用函数vi() 算法设计:依次对L的每个数据元素调用函数vi() 5.函数void Exchange(SqList *L) 功能说明:实现顺序表L的逆置 算法设计:用for循环将顺序表L中的第i个元素依次与第(i+length)个元素交换6.函数void print(ElemType *c) 功能说明:打印元素c 算法设计:打印元素c 2. (四)具体程序的实现

相关文档
相关文档 最新文档