当前位置:文档之家› 顺序表的基本操作实现 c语言

顺序表的基本操作实现 c语言

顺序表的基本操作实现 c语言
顺序表的基本操作实现 c语言

数据结构实验报告书

1.实验题目

顺序表的基本功能实现

2.实验目的和要求

熟悉顺序表的插入、删除和查找。

3.实验内容

实现顺序表各种基本运算

(1)以顺序表作为存储结构;

(2)实现顺序表上的数据元素的插入运算;

(3)实现顺序表上的数据元素的删除运算;

(4)实现顺序表上的数据元素的查找运算。

4.(1)抽象数据类型定义

实现顺序表上的数据元素的插入删除和查找运算

(2)存储结构定义及算法思想

typedef struct

{

int *elem;

int length;

int listsize;

}SqList;

插入算法思路:通过不断循环找到插入位置的前一个元素,将这个元素之后的每一个元素后移,再将要插入的元素放入其中,最后将表长加一。

删除算法思路;类似于插入的思路,找到删除元素之后的第一个元素找到,依次将后面的元素前移覆盖,最后减小一个单位的表长。

(3)实验结果与分析

初始界面

输入元素数目3和元素1,2,3

进入到主界面

选择1

选择2,并删除第2个元素

选择3,插入5到第3个位置

选择4,查询第2位元素

选择1检查全表

(4)心得体会

本次实验我没有做多余的提前准备,只是复习了一下书上的算法,到机房上机编写程序之后发现问题很多,而且时间也不是很够,于是只完成了单链表的程序,在试验中遇到了很多的问题,比如工程格式的问题,这个问题直接导致我很多问题无法解决,不过后来及时发现了错误,成功的解决了问题,本次试验还有很多不足,由于c语言已经不是很记得,很多语法错误都没能即使发现,给调试带来了巨大的困难,下次实验之前我会提前准备好程序以免浪费宝贵上机时间

附录:源程序

#include

#include

#define OK 1

#define ERROR 0

#define LIST_INIT_SIZE 100

typedef struct

{

int *elem;

int length;

int listsize;

}SqList;

int InitList(SqList &L)

{

L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));

if(!L.elem) exit(OVERFLOW);

L.listsize=LIST_INIT_SIZE;

L.length=0;

return OK;

}

int CreatList(SqList &L)

{

int i,n;

printf("请输入元素个数n和n个元素\n");

scanf("%d",&n);

for(i=0;i

scanf("%d",L.elem+i);

L.length=n;

return OK;

}

void SHOW(SqList L)

{

int i;

for(i=0;i

printf("%d ",*(L.elem+i));

printf("\n长度为:%d\n\n",L.length);

}

int ListDelete(SqList &L)

{

int i,j,n,*p;

printf("请输入删除第几位元素\n");

scanf("%d",&i);

if(i<0||i>L.length)

return ERROR;

p=&(L.elem[i-1]);

n=*p;

printf("删除的第%d位元素值为%d",i,n);

for(j=i; j

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

L.length--;

return OK;

}

int ListInsert(SqList &L)

{

int i,e;

printf("请输入插入到第几位元素\n");

scanf("%d",&i);

printf("请输入插入什么元素\n");

scanf("%d",&e);

int *p,*q;

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

return ERROR;

q=&(L.elem[i-1]);

for(p=&(L.elem[L.length-1]);p>=q;--p)

*(p+1)=*p;

*q=e;

++L.length;

return OK;

}

int LocateElem(SqList L)

{

int i,n,*p;

printf("请输入查找第几位元素\n");

scanf("%d",&i);

int j;

if(i<0||i>L.length)

return ERROR;

p=&(L.elem[i-1]);

n=*p;

printf("查找到的第%d位元素值为%d",i,n);

return OK;

}

void choice()

{

printf("*********请选择你的想要的操作***********\n");

printf("<1> 显示顺序表里的所有元素\n");

printf("<2> 删除第n个元素\n");

printf("<3> 插入元素到第n个位置\n");

printf("<4> 查询第n位元素\n");

printf("<0> 退出\n");

}

int main()

{

SqList L;

InitList(L);

CreatList(L);

system("cls");

choice();

int cho;

while(1)

{

scanf("%d",&cho);

switch(cho)

{

case 1:SHOW(L);

break;

case 2:ListDelete(L);

break; case 3:ListInsert(L);

break; case 4:LocateElem(L);

break; case 0:exit(0);

}

}

return(0);

}

数据结构_实验1_线性表的基本操作

实验1 线性表的基本操作 一、需求分析 目的: 掌握线性表运算与存储概念,并对线性表进行基本操作。 1.初始化线性表; 2.向链表中特定位置插入数据; 3.删除链表中特定的数据; 4.查找链表中的容; 5.销毁单链表释放空间; 二、概要设计 ●基础题 主要函数: 初始化线性表InitList(List* L,int ms) 向顺序表指定位置插入元素InsertList(List* L,int item,int rc)删除指定元素值的顺序表记录DeleteList1(List* L,int item) 删除指定位置的顺序表记录 DeleteList2(List* L,int rc) 查找顺序表中的元素 FindList(List L,int item) 输出顺序表元素OutputList(List L) 实验步骤: 1,初始化顺序表 2,调用插入函数 3,在顺序表中查找指定的元素 4,在顺序表中删除指定的元素 5,在顺序表中删除指定位置的元素 6,遍历并输出顺序表 ●提高题

要求以较高的效率实现删除线性表中元素值在x到y(x和y自定义)之间的所有元素 方法: 按顺序取出元素并与x、y比较,若小于x且大于y,则存进新表中。 编程实现将两个有序的线性表进行合并,要求同样的数据元素只出现一次。 方法: 分别按顺序取出L1,L2的元素并进行比较,若相等则将L1元素放进L中,否则将L 1,L2元素按顺序放进L。 本程序主要包含7个函数 主函数main() 初始化线性表InitList(List* L,int ms) 向顺序表指定位置插入元素InsertList(List* L,int item,int rc)删除指定元素值的顺序表记录DeleteList1(List* L,int item) 删除指定位置的顺序表记录 DeleteList2(List* L,int rc) 查找顺序表中的元素 FindList(List L,int item) 输出顺序表元素OutputList(List L) 提高题的程序 void Combine(List* L1,List* L2,List* L) void DeleteList3(List* L,int x,int y) 二、详细设计 初始化线性表InitList(List* L,int ms) void InitList(List* L,int ms) { L->list=(int*)malloc(LIST_INIT_SIZE*sizeof(int)); L->size=0; L->MAXSIZE=LIST_INIT_SIZE;

201560140140--袁若飞--实验1:线性表的基本操作及其应用

数据结构 实验1:线性表的基本操作及其应用 班级:RB软工移151 学号:201560140140 姓名:袁若飞

实验一线性表 一、实验目的 1、帮助读者复习C++语言程序设计中的知识。 2、熟悉线性表的逻辑结构。 3、熟悉线性表的基本运算在两种存储结构上的实现,其中以熟悉链表的操作为侧重点。 二、实验内容 本次实验提供4个题目,每个题目都标有难度系数,*越多难度越大,题目一、二是必做题。题目三、题目四选作。 三、实验准备知识 1、请简述线性表的基本特性和线性表的几种基本操作的机制 ①答:线性表的基本特性是:对线性表中某个元素ai来说,称其前面的元素ai-1为ai的直接前驱,称其后前面的元素ai+1为ai的直接后继。显然,线性表中每个元素最多有一个直接前驱和一个直接后继。 ②答:线性表的几种基本操作的机制有六个: (1)初始化线性表initial_List(L)——建立线性表的初始结构,即建空表。这也是各种结构都可能要用的运算。 (2)求表长度List_length(L)——即求表中的元素个数。 (3)按序号取元素get_element(L,i)——取出表中序号为i的元素。(4)按值查询List_locate(L,x)——取出指定值为x的元素,若存在该元素,则返回其地址;否则,返回一个能指示其不存在的地址值或标记。 (5)插入元素List_insert(L,i,x)——在表L的第i个位置上插入值为x的元素。显然,若表中的元素个数为n,则插入序号i应满足1<=i<=n+1。(6)删除元素List_delete(L,i)——删除表L中序号为i的元素,显然,待删除元素的序号应满足1<=i<=n。 2、掌握线性表的逻辑结构。 3、掌握线性表的链式存储结构。 4、熟练掌握线性表的插入、删除等操作。

实验一 线性表的基本操作

实验一线性表的基本操作 一、实验目的 1. 熟悉C/C++语言上机环境; 2. 掌握线性表的基本操作:查找、插入、删除等运算在顺序存储、链式存储结构上的运算。 二、实验环境 1. 装有Visual C++6.0的计算机。 2. 本次实验共计2学时。 三、实验内容 1. 建立顺序表,基本操作包括:初始化、建立顺序表、输出顺序表、判断是否为空、取表中第i个元素、查找、插入和删除。并在主函数中完成对各种函数的测试。 2. 设有两个非递增有序的线性表A和B,均已顺序表作为存储结构。编写算法实现将A表和B表合并成一个非递增有序排列的线性表(可将线性表B插入线性表A中,或重新创建线性表C)。 3. 建立单链表,基本操作包括:初始化、判断是否为空、取表中第i个元素、查找、插入和删除。并在主函数中完成对各种函数的测试。 四、源程序 #include #include #include #define MaxSize 50 typedef char ElemType; //-------存储结构---------- typedef struct { ElemType elem[MaxSize]; //存放顺序表中的元素 int length; //存放顺序表的长度 } SqList; //-------初始化线性表---------- void InitList(SqList *&L) //初始化线性表,构造一个空的线性表,并将长度设置为0 { L=(SqList *)malloc(sizeof(SqList)); L->length=0;

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

实验一:线性表的基本操作 【实验目的】 学习掌握线性表的顺序存储结构、链式存储结构的设计与操作。对顺序表建立、插入、删除的基本操作,对单链表建立、插入、删除的基本操作算法。 【实验内容】 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

实验一 线性表基本操作的编程实现

实验一线性表基本操作的编程实现 【实验目的】 线性表基本操作的编程实现 要求: 线性表基本操作的编程实现(2学时,验证型),掌握线性表的建立、遍历、插入、删除等基本操作的编程实现,也可以进一步编程实现查找、逆序、排序等操作,存储结构可以在顺序结构或链表结构中任选,可以完成部分主要功能,也可以用菜单进行管理完成大部分功能。还鼓励学生利用基本操作进行一些更实际的应用型程序设计。 【实验性质】 验证性实验(学时数:2H) 【实验内容】 把线性表的顺序存储和链表存储的数据插入、删除运算其中某项进行程序实现。建议实现键盘输入数据以实现程序的通用性。为了体现功能的正常性,至少要编制遍历数据的函数。 【注意事项】 1.开发语言:使用C。 2.可以自己增加其他功能。 【思考问题】 1.线性表的顺序存储和链表存储的差异?优缺点分析? 2.那些操作引发了数据的移动? 3.算法的时间效率是如何体现的? 4.链表的指针是如何后移的?如何加强程序的健壮性? 【参考代码】(以下内容,学生任意选择一个完成即可) (一)利用顺序表完成一个班级学生课程成绩的简单管理 1、预定义以及顺序表结构类型的定义 (1) #include #include #define ListSize 100 //根据需要自己设定一个班级能够容纳的最大学生数 (2) typedef struct stu { int num; //学生的学号 char name[10]; //学生的姓名 float physics; //物理成绩 float math; //数学成绩 float english; //英语成绩 }STUDENT; //存放单个学生信息的结构体类型 typedef struct List { STUDENT stu[ListSize]; //存放学生的数组定义,静态分配空间

实验一 线性表基本操作

实验一线性表基本操作 (4课时) 一、实验目的 掌握线性表的顺序表和链表的基本操作:建立、插入、删除、查找、合并、打印等运算。 二、实验要求 1.格式正确,语句采用缩进格式; 2.设计子函数实现题目要求的功能; 3.编译、连接通过,熟练使用命令键; 4.运行结果正确,输入输出有提示,格式美观。 5.输入数据至少三组,分别代表不同的情况,以测试程序的正确性。 6.将运行结果截图,并粘在文档的相应位置。 三、实验环境 1.turboc2,win-tc,VC++ 四、实验内容和步骤 1.编程实现在顺序存储的有序表中插入一个元素。 2.编程实现把顺序表中从i个元素开始的k个元素删除。 3.编程序实现将单链表的数据逆置,即将原表的数据(a1,a2….an)变成(an,…..a2,a1)。4.约瑟夫环问题。 约瑟夫问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个整数作为报数上限值m,从第一个人开始顺时针自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有的人全部出列为止。试设计一个程序,求出出列顺序。 利用单向循环链表作为存储结构模拟此过程,按照出列顺序打印出各人的编号。 例如m的初值为20;n=7,7个人的密码依次是:3,1,7,2,4,8,4,出列的顺序为6,1,4,7,2,3,5。 五、根据实验过程填写下面内容 1.写出第1题的程序并写出运行结果和分析。 #include "stdio.h" #include "malloc.h" #define OK 1 #define ERROR 0 #define ElemType int #define MAXSIZE 100 typedef struct//顺序表申明 { ElemType elem[MAXSIZE]; int last; }SeqList;

线性表的基本操作

实验一:线性表的基本操作 1.实验目的: 1)掌握用VC++上机调试线性表的基本方法; 2)掌握线性表的基本操作,插入、删除、查找,以及线性表合并等运算在顺序存储结构和链接存储结构上的运算。 2.实验内容: 1)线性表建立、插入、删除操作实现; 2)已知有序表SA,SB,其元素均为递增有序,将此两表归并成一个新有序表SC,且SC中的元素仍然递增有序。 #include #include #define OK 1 #define ERROR 0 typedefstruct Node { int data; struct Node *next; }Node,*LinkList; void InitList(LinkList *L) { *L=(LinkList)malloc(sizeof(Node)); (*L)->next=NULL; } void CreateFromTail(LinkList L) { Node *r,*s; int flag=1; int c; r=L;

printf("尾插法建立单链表,输入-1结束\n"); while(flag) { scanf("%d",&c); if(c!=-1) { s=(Node*)malloc(sizeof(Node)); s->data=c; r->next=s; r=s; } else { flag=0; r->next=NULL; } } } void printL(LinkList L) { Node *p; p=L; while(p->next!=NULL) { printf("%d ",p->next->data); p=p->next; } printf("\n"); } int InsertList(LinkList L,int i,int e) { Node *pre,*s; int k; if(i<1) { return ERROR; } pre=L; k=0; while(pre!=NULL&& k

《数据结构》实验报告模板附实例实验一线性表的基本操作实现.doc

实验一线性表的基本操作实现及其应用 一、实验目的 1、熟练掌握线性表的基本操作在两种存储结构上的实现,其中以熟悉各种链表的操作为重点。 2、巩固高级语言程序设计方法与技术,会用线性链表解决简单的实际问题。 二、实验内容 √1、单链表的表示与操作实现( * ) 2、约瑟夫环问题 3、Dr.Kong的艺术品 三、实验要求 1、按照数据结构实验任务书,提前做好实验预习与准备工作。 2、加“*”题目必做,其他题目任选;多选者并且保质保量完成适当加分。 3、严格按照数据结构实验报告模板和规范,及时完成实验报告。 四、实验步骤 (说明:依据实验内容分别说明实验程序中用到的数据类型的定义、主程序的流程以及每个操作(成员函数)的伪码算法、函数实现、程序编码、调试与分析、总结、附流程图与主要代码) ㈠、数据结构与核心算法的设计描述 (程序中每个模块或函数应加注释,说明函数功能、入口及出口参数) 1、单链表的结点类型定义 /* 定义DataType为int类型*/ typedef int DataType; /* 单链表的结点类型*/ typedef struct LNode { DataType data; struct LNode *next; }LNode,*LinkedList; 2、初始化单链表 LinkedList LinkedListInit( )

{ // 每个模块或函数应加注释,说明函数功能、入口及出口参数} 3、清空单链表 void LinkedListClear(LinkedList L) {// 每个模块或函数应加注释,说明函数功能、入口及出口参数} 4、检查单链表是否为空 int LinkedListEmpty(LinkedList L) { …. } 5、遍历单链表 void LinkedListTraverse(LinkedList L) { …. } 6、求单链表的长度 int LinkedListLength(LinkedList L) { ….} 7、从单链表表中查找元素 LinkedList LinkedListGet(LinkedList L,int i) { //L是带头结点的链表的头指针,返回第i 个元素} 8、从单链表表中查找与给定元素值相同的元素在链表中的位置 LinkedList LinkedListLocate(LinkedList L, DataType x) { ……} 9、向单链表中插入元素 void LinkedListInsert(LinkedList L,int i,DataType x) { // L 为带头结点的单链表的头指针,本算法 // 在链表中第i 个结点之前插入新的元素x } 10、从单链表中删除元素 void LinkedListDel(LinkedList L,DataType x) { // 删除以L 为头指针的单链表中第i 个结点} 11、用尾插法建立单链表 LinkedList LinkedListCreat( ) { ……}

实验二 线性表的基本操作

实验二线性表的基本操作 一、实验目的 1. 掌握使用VC++6.0上机调试线性表的基本方法; 2. 掌握线性表的基本操作:插入、删除、查找以及线性表合并等运算在顺序存储结构上的运算。 3. 掌握线性表的基本操作:插入、删除、查找以及线性表合并等运算在链式存储结构上的运算。 二、实验要求 1. 认真阅读和掌握本实验的程序。 2. 补全程序上机调试。 3. 保存程序的运行结果和程序清单,并结合程序进行分析 三、实验内容 1. 顺序表基本操作的实现:包括顺序表的创建、插入、删除和查找,请补全程序并调试。第1步:任务分析 完成顺序表的建立,插入,删除和查找等函数功能,有助于更好的理解顺序表的概念和使用规律。上述函数都是线性表的基本操作,根据这些基本操作,可以构成其他更复杂的操作。 第2步:程序构思 (1) 顺序表的创建:因为顺序表的结构中包括了存放数据元素的起始地址,表的容量,以及表的当前长度等部分,所以表的创建工作一方面要为这些成员赋值,而存放数据元素的空间也需要在此处进行分配,因此整个创建工作包括了空间的创建和各个成员的赋值操作。 (2) 顺序表的插入:因为顺序表中的元素是连续存放的,元素之间的关系是通过位置的相邻性来体现的。因此在顺序表中的第i个位置上插入元素的操作可以表示为: ●从表尾到插入位置的所有元素依次向后移动一个位置 ●将待插入元素插入到i的位置 (3) 顺序表的删除:与插入相同,删除第i个数据元素后,需要将插入位置之后一直到表尾的数据元素依次作前移操作。 (4) 顺序表的查找:在顺序表中进行查找时,只能从第一个元素开始,逐个判断是否满足查找条件,如果找到返回元素在表中的下标,否则继续向后查找,直到表结束。 第3步:部分源代码: //结构的定义: #define ListSize 50 typedef struct { int * elem; /* elem表示存放数据元素的基地址*/

实验一--线性表基本操作的编程实现

实验一--线性表基本操作的编程实现

实验一线性表基本操作的编程实现 【实验目的】 线性表基本操作的编程实现 要求: 线性表基本操作的编程实现(2学时,验证型),掌握线性表的建立、遍历、插入、删除等基本操作的编程实现,也可以进一步编程实现查找、逆序、排序等操作,存储结构可以在顺序结构或链表结构中任选,可以完成部分主要功能,也可以用菜单进行管理完成大部分功能。还鼓励学生利用基本操作进行一些更实际的应用型程序设计。 【实验性质】 验证性实验(学时数:2H) 【实验内容】 把线性表的顺序存储和链表存储的数据插入、删除运算其中某项进行程序实现。建议实现键盘输入数据以实现程序的通用性。为了体现功能的正常性,至少要编制遍历数据的函数。 【注意事项】 1.开发语言:使用C。 2.可以自己增加其他功能。 【思考问题】

1.线性表的顺序存储和链表存储的差异?优缺点分 析? 2.那些操作引发了数据的移动? 3.算法的时间效率是如何体现的? 4.链表的指针是如何后移的?如何加强程序的健壮 性? 【参考代码】(以下内容,学生任意选择一个完成即可)(一)利用顺序表完成一个班级学生课程成绩的简单管理 1、预定义以及顺序表结构类型的定义 (1) #include #include #define ListSize 100 //根据需要自己设定一个班级能够容纳的最大学生数 (2) typedef struct stu { int num; //学生的学号 char name[10]; //学生的姓名 float physics; //物理成绩 float math; //数学成绩 float english; //英语成绩 }STUDENT; //存放单个学生信息的结

c++学生信息的线性表的基本操作

#include #include #include #include using namespace std; #define MaxSize 150 typedef struct { int len; char xuehao[MaxSize][30]; char name[MaxSize][30]; char banji[MaxSize][30]; float math[MaxSize]; float english[MaxSize]; float cplus[MaxSize]; float total[MaxSize]; }SqList; void save(SqList *L) { fstream f1("Sq.txt",ios::out); f1<len<len;i++) f1<xuehao[i]<<' '<name[i]<<' '<banji[i]<<' '<math[i]<<' '<english[i]<<' '<cplus[i]<<' '<total[i]<len=0; else { f1>>L->len; for(i=0;ilen;i++) f1>>L->xuehao[i]>>L->name[i]>>L->banji[i]>>L->math[i]>>L->english[i]>>L->cplus[i]>> L->total[i]; } f1.close(); }

线性表的基本操作

数据结构实验报告 2011 年 4 月13 日 项目组成 一. 二.程序结构图 题目一: main InitList_Sq ListEmpty_S ListLength_S PriorElem_Sq LocateElem_S GetElem_Sq ListInsert_Sq CreateList_S DestroyList_S ClearList_Sq NextElem_Sq ListDelete_Sq ListTraverse_S

题目二: 三.算法及其功能函数 题目一: InitList_Sq(SqList *L) /*创建线性表*/ CreateList_Sq(SqList *L) /*输入线性表中元素 */ DestroyList_Sq(SqList *L) /*销毁线性表*/ ClearList_Sq(SqList *L) /*清空线性表*/ ListEmpty_Sq(SqList L) /*判断是否为空*/ ListLength_Sq(SqList L) /*求线性表长度 */ GetElem_Sq(SqList L, int i, ElemType *e) /*取第i 个元素并用e 返回*/ LocateElem_Sq (SqList L, int e) /*判断e 在表中位置*/ PriorElem_Sq(SqList L,int i, ElemType cur_e, ElemType *pre_e) /*取前驱*/ NextElem_Sq(SqList L,int i, ElemType cur_e, ElemType *next_e ) /*取后继*/ ListInsert_Sq(SqList *L, int i, ElemType e) /*在第i 个元素前插入e*/ ListDelete_Sq(SqList *L, int i, ElemType *e) /*删除第i 个元素 */ ListTraverse_Sq(SqList L,int i) /*遍历线性表*/ main InitList_L ListInsert_L CreateList_L NextElem_L DestroyList_ LocateElem_ PriorElem_L ListEmpty_L ListDelete_L ClearList_L ListTraverse_ ListLength_L GetElem_L

数据结构实验_线性表基本操作

学 《数据结构》课程 实验报告 实验名称:线性表基本操作的实现实验室(中心): 学生信息: 专业班级: 指导教师: 实验完成时间: 2016

实验一线性表基本操作的实现 一、实验目的 1.熟悉C语言的上机环境,进一步掌握C语言的结构特点。 2.掌握线性表的顺序存储结构的定义及C语言实现。 3.掌握线性表的链式存储结构——单链表的定义及C语言实现。 4.掌握线性表在顺序存储结构即顺序表中的各种基本操作。 5.掌握线性表在链式存储结构——单链表中的各种基本操作。 二、实验内容及要求 1.顺序线性表的建立、插入、删除及合并。 2.链式线性表的建立、插入、删除及连接。 三、实验设备及软件 计算机、Microsoft Visual C++ 6.0软件 四、设计方案(算法设计) ㈠采用的数据结构 本程序顺序表的数据逻辑结构为线性结构,存储结构为顺序存储;链表的数据逻辑结构依然为线性结构,存储结构为链式结构。 ㈡设计的主要思路 1.建立含n个数据元素的顺序表并输出该表中各元素的值及顺序表的长度,顺序

表的长度和元素由用户输入; 2.利用前面建立的顺序表,对顺序表进行插入、删除及合并操作; 3.建立一个带头结点的单链表,结点的值域为整型数据,链表的元素由用户输入; 4.对前面建立的链表进行插入、删除及连个链表的连接操作; ㈢算法描述 1、顺序表 void Init(sqlist &);//初始化顺序表 BOOL Inse(sqlist &,int,char); //在线性表中插入元素 BOOL del(sqlist&,int,char &); //在线性表中删除元素 int Loc(sqlist,char); //在线性表中定位元素 void print(sqlist); //输出顺序表 void combine( sqlist & , sqlist & , sqlist &);//两个线性表的合并2、链表 void CreaL(LinkList &,int); //生成一个单链表 BOOL LInsert(LinkList &,int,char); //在单链表中插入一个元素 BOOL LDele(LinkList &,int,char &); //在单链表中删除一个元素 BOOL LFind_key(LinkList,char,int &); //按关键字查找一个元素 BOOL LFind_order(LinkList,char &,int); //按序号查找一个元素

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

实验1 线性表的基本操作 姓名 小明 一、需求分析 1.程序的功能:实现基本线性表的运算:插入数据,删除数据,查找数据,求顺序表长度,遍历链表。 2.输入输出的要求:数据必须为整数并大于0,插入数据必须为一位整数; 3.测试数据 测试数据可由使用者自己输入。 二、概要设计 1.本程序所用的抽象数据类型的定义:由顺序表,结构体通过指针连接组成; 2.主程序的流程及各程序模块之间的层次关系。 然后根据各个选项调用所需函数 三、详细设计 1.定义相关的数据类型: 结构体链表SqList,其中包含 选择操作 删 除 数 据 输 入 初 始 元 素 插 入 数 据 查 找 数 据 比 较 数 据 求 长 度 退 出

ElemType *elem; int length;int listsize; 2.写出各模块的伪码算法; 插入数据: Status ListInsert(Sqlist &L,int i,ElemType e) { int *q=&(L.elem[i-1]); ElemType *newbase,*p; if(i<1||i>(L.length+1)) return ERROR; if(L.length>=L.listsize) { newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType)); if(!newbase)exit(OVERFLOW); L.elem=newbase; L.listsize+=LISTINCREMENT; } for(p=&(L.elem[L.length-1]);p>=q;--p) *(p+1)=*p; *q=e; ++L.length; return OK; } 删除数据: Status ListDelete(Sqlist &L,int i,ElemType e) { if(i<1||(i>L.length)) return ERROR; ElemType *p,*q; p=&(L.elem[i-1]);

C语言线性表基本操作

c语言中线性表基本操作方法 /*线性表的操作*/ #include #include typedef int ElemType; struct List { ElemType *list; int size; int MaxSize; }; /*初始化列表,即动态存储空间分配并置L为一个空列表*/ void initList(struct List *L,int ms) { if(ms<=0) { printf("MaxSize 非法!"); exit(1); } L->MaxSize = ms; L->size = 0; L->list=malloc(ms * sizeof(ElemType)); if(!L->list) { printf("空间分配失败!"); exit(1); } /*printf("%d\n",sizeof(ElemType));*//*暂用字节数*/ return ; } void againMalloc(struct List *L) { ElemType *p = realloc(L->list,2*L->MaxSize*sizeof(ElemType)); if(!p) { printf("存储空间分配失败!"); exit(1); } L->list = p; /*使list指向新线性表空间*/ L->MaxSize=2 * L->MaxSize; /*把线性空间大小修改为新的长度*/ } /*向线性表L的表尾插入元素*/ void insertLastList(struct List *L,ElemType x)

线性表的基本操作(西华大学数据结构)(1)

数学与计算机学院 实验报告 (2011 / 2012 学年第 1 学期) 课程名称数据结构 课程代码6014279 实验时间2011 年11 月16 日 指导单位软件工程系 指导教师周立章 学生姓名年级10 学号专业Web与移动平台技术 实验成绩 实验名称学生成绩管理系统指导教师周立章 实验类型设计实验学时2+10 实验时间 一、实验目的和要求 (1)掌握线性表的顺序存储结构,在顺序存储结构基础上进行的插入、删除、查找等算法的思想和实现; (2)掌握线性表的链式存储结构。掌握线性表的链式存储结构的建立。在链表中插入、删除和查找算法的思想和算法实现。 (3)掌握线性表在顺序存储、链式存储结构的基础进行的各种应用。 (4)掌握链表的定义和基础知识以及链表的存储和链式存储结构及其应用。 (5)掌握队列的基础知识,循环顺序队列、链队列及其应用。

(7)设计友好的人机交互菜单,通过相应的流程控制语句的正确使用,使得在主函数中体现对各功能模块的调用,从而实现一个完整的小型管理系统。 要求:课内实验学时2学时,课后学时要求为10学时。 二、实验环境(实验设备) 硬件: 微型计算机P4 软件: Windows XP+Microsoft Visual C++6.0 三、实验原理及内容 实验题目利用链式存储结构存储学生的成绩信息,设计一个学生成绩管理系统,具有以下功能: (1)定义学生结构体类型struct Student,每个学生包括学号、姓名、3门功课(课程名自己定义)、总分。 (2)建立双向循环链表:输入若干学生的信息(当输入学生的学号为0000时结束,要求自动计算总分),并按输入的顺序建立双向循环链表; (3)输出学生成绩信息:遍历双向循环链表,输出所有学生的完整信息到屏幕; (4)查找指定学号的学生信息。如果查找成功,输出所有学生信息,否则输出失败。 (5)插入学生信息:以队列的方式将新学生成绩信息插入到链表中;

线性表顺序存储结构的11个基本操作函数

/* 1. 设计线性表顺序存储结构的11个基本操作函数,并编程实现之*/ #include #include #include #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 typedef char ElemType; typedef struct { ElemType *elem; int length; int listsize; }SqList; bool compare(ElemType p,ElemType e) { if (p==e) return true; else return false; } void InitList(SqList &L) //构造一个空的线性表L { L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if(!L.elem)exit(0); L.length=0; L.listsize=LIST_INIT_SIZE; } void DestroyList(SqList &L) //销毁线性表L { free(L.elem); L.elem=NULL; if(L.elem)exit(0); L.length=0; } void ClearList(SqList &L) //将L重置为空表 { L.elem='\0';

L.length=0; } bool ListEmpty(SqList &L) //若L为空表,返回TRUE,否则FALSE { if(L.length==0) return true; else return false; } int ListLength(SqList L) //返回L中元素个数 { return L.length; } bool GetElem(SqList L,int i,ElemType &e)//用e返回数据中第i个元素的值 { if(!L.length) return false; else if(i>L.length||i<1) return false; else { e=L.elem[i-1]; return true; } } int LocateElem(SqList L,ElemType e) { int i=1; bool cmp=0; if(L.length==0) return 0; else{ while(i<=L.length&&!cmp) { cmp=compare(L.elem[i-1],e); i++; } if(cmp) return i-1; else return 0; } } int PriorElem(SqList L,ElemType cur_e,ElemType &pre_e)//若cur_e是L的数据元素,且不是第一个,用pre_e返回它的前驱。否则操作失败

线性表基本操作实例

数据结构,线性表的基本操作实例。本例子实现了建立一个顺序存储的线性表,实现线性表的插入、删除操作。 而且符合以下要求: (1)建立一个按关键字有序的线性表,从键盘上输入一个数,将该数插入到表中,使该线性表插入数据后仍按关键字有序; (2)建立一个线性表,从键盘上输入一个数,查找表中是否存在该数,若有则删除所有与该数相等的数。 该线性表的基本操作实例的完整程序代码为: #include using namespace std; typedef int datatype; const int maxsize=100; typedef struct{ datatype data[maxsize+1]; int n; }sqlist; sqlist* creat() { datatype x; int i=1; sqlist *L; L=new sqlist; while(cin>>x,x!=t) { L->data[i]=x; i++; } L->n=i-1; L->data[0]=L->n; return L; } int insertHigh(sqlist *L,datatype x) { int j,i; if(L->n==maxsize) { cout<<"表满,不能插入! "; return 0;} for(int j=1;j<=L->n;j++) if(L->data[j]>=x) { i=j; break; } L->n++; for(j=L->n;j>i;j--) { L->data[j]=L->data[j-1]; } L->data[i]=x;

线性表的基本操作及其应用

实验一线性表的基本操作及其应用 一、实验目的 1、帮助读者复习C++语言程序设计中的知识。 2、熟悉线性表的逻辑结构。 3、熟悉线性表的基本运算在两种存储结构上的实现,其中以熟悉链表的操作为侧重点。 二、实验内容 多项式的表示及相加 [问题描述] 设计一个算法,以实现一元稀疏多项式的加法运算。 [基本要求] (1)输入并建立多项式; (2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,……,cn,en,其中n是多项式的项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列; (3)多项式a和b相加,建立多项式a+b。 [测试数据] 由学生任意指定。 [实现提示] 用带表头结点的单链表存储多项式。 [选作内容] 多项式a和b相减,建立多项式a-b。 三、实验前的准备工作 1、掌握线性表的逻辑结构。 2、掌握线性表的链式存储结构。 3、熟练掌握线性表的插入、删除等操作。 主要代码及解析 #include using namespace std; //结点结构 struct Node

{ int data; //系数 int No; //次方数 Node*next; }; //创建链表,tail是链表的尾指针,d、n分别给data和No赋值 Node* CreateStr(Node*tail,int d,int n) { if(d==0) //如果系数为,则不增加结点 return tail; //返回尾指针,以便可以连续增加结点Node*q=new Node;//系数不为,增加结点 q->data=d; q->No=n; q->next=NULL; tail->next=q; tail=q; return tail; } int main() { Node*str1=new Node; Node*str2=new Node; //申请两个结点 //分别给两个结点赋值 int m,n; Node*q=str1; cout<<"第一个方程式:"<>m) { //输入结点系数及次方数,循环结束条件是输入的m不是int型cout<<"次方数:"; cin>>n; Node*p=new Node; p->data=m; p->No=n; q->next=p; q=p; } q->next=NULL;//最后结点的next指针赋值为空 cin.clear(); //清除错误状态 cin.ignore();//跳过无效数据,以便继续完成第二个方程式 q=str2;//创建第二个方程式

数据结构线性表基本操作(C语言)

#include #include #include #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status; typedef int ElemType; #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 typedef struct { ElemType *elem; int length; int listsize; }SqList; Status InitList_Sq(SqList *L); //构造空的线性表 void DestroyList_Sq(SqList *L); //销毁一个线性表 void ClearList_Sq (SqList *L); //将L置为空表 Status ListEmpty_Sq (SqList L); //空表返回TRUE Status ListLength_Sq (SqList L); // 返回元素个数 Status GetElem_Sq (SqList L, int i, ElemType *e); //用e返回第i个元素算法2.2中使用 Status LocateElem_Sq(SqList L, ElemType e, Status (* compare)(ElemType, ElemType)); // 在L中找到一个值与e满足compare()的元素的位序 Status PriorElem_Sq(SqList L, ElemType cur_e, ElemType *pre_e); //用pre_e返回cur_e的前驱 Status NextElem_Sq(SqList L, ElemType cur_e, ElemType *next_e); //用next_e返回cur_e的后继 Status ListInsert_Sq(SqList *L, int i, ElemType e); //在第i位插入新的元素e Status ListDelete_Sq(SqList *L, int i, ElemType *e); //删除第i个元素用e返回 //算法2.3

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