当前位置:文档之家› 顺序表基本操作(C 版)

顺序表基本操作(C 版)

顺序表基本操作(C  版)
顺序表基本操作(C  版)

C语言数据结构串的基本操作

实验九串的基本操作 #include #include #include typedef char Status; int strlen(char *p) { int i=0; while(*p++)i++; return i; } typedef struct { char *ch; // 若是非空串,则按串长分配存储区,否则ch为NULL int length; // 串长度 }HString; // 初始化(产生空串)字符串T void InitString(HString *T) { (*T).length=0; (*T).ch=NULL; } // 生成一个其值等于串常量chars的串T Status StrAssign(HString *T, char *chars) { int i,j; if((*T).ch) free((*T).ch); // 释放T原有空间 i = strlen(chars); // 求chars 的长度i if(!i) { // chars的长度为0 (*T).ch = NULL; (*T).length = 0; } else { // chars的长度不为0 (*T).ch = (char*)malloc(i*sizeof(char)); // 分配串空间 if(!(*T).ch) // 分配串空间失败 exit(0); for(j = 0; j < i; j++) // 拷贝串 (*T).ch[j] = chars[j]; (*T).length = i; } return 1; } // 由串S复制得串T int StrCopy(HString *T,HString S) { int i; if((*T).ch) free((*T).ch); // 释放T原有空间 (*T).ch=(char*)malloc(S.lengt h*sizeof(char)); // 分配串空间if(!(*T).ch) // 分配串空间失 败 exit(0); for(i=0;i

C语言之循环队列的基本操作

1):循环队列的基本操作 #include #include #define OK 1 #define ERROR 0 typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等typedef int QElemType; #define MAXQSIZE 100 // 最大队列长度(对于循环队列,最大队列长度要减1) typedef struct { QElemType *base; // 初始化的动态分配存储空间 int front; // 头指针,若队列不空,指向队列头元素 int rear; // 尾指针,若队列不空,指向队列尾元素的下一个位置 }SqQueue; Status InitQueue(SqQueue &Q) { Q.base=(QElemType *)malloc(MAXQSIZE*sizeof(QElemType)); if(!Q.base) { return ERROR; } Q.front=Q.rear=0; return OK; } Status EnQueue(SqQueue &Q,QElemType e) { if((Q.rear+1)%MAXQSIZE==Q.front) return ERROR; Q.base[Q.rear]=e; Q.rear=(Q.rear+1)%MAXQSIZE; return OK; } Status DeQueue(SqQueue &Q, QElemType &e) { if(Q.front==Q.rear) return ERROR; e=Q.base[Q.front]; Q.front=(Q.front+1)%MAXQSIZE; return OK; }

数据结构《第4章 串存储与基本操作的实现》

第四章串存储与基本操作的实现 本章学习要点 ◆熟悉串的相关概念以及串与线性表的关系 ◆重点掌握串的定长存储、堆分配存储的表示方法与基本操作的实现 ◆了解串的各种存储结构,能根据需要合理选用串的存储结构解决实际问题 “串”(string),是字符串的简称,它是一种特殊的线性表,其特殊性在于组成线性表的数据元素是单个字符。字符串在计算机处理实际问题中使用非常广泛,比如人名、地名、商品名、设备名等均为字符串。同样在文字编辑、自然语言理解和翻译、源程序的编辑和修改等方面,都离不开对字符串的处理。 4.1串的基本概念 4.1.1串的概念 1.串的定义 串(string)是由n个字符组成的有限序列,记为:S=”a0a1a2…a n-1” (n≥0)。 其中,S是串的名字,字符序列a0a1a2…a n-1是串的值,a i(0≤i≤n-1)可以是字母、数字或其他字符元素;由于在C语言系统中数组元素的下标是从0开始的,所以串中所含元素的序号等于该元素的下标值加1;串中所含字符的个数n称为该串的长度,长度为0的字符串称为空串(null string)。 从串的定义可以看出,串实际上是数据元素为字符的特殊的线性表。 例如: (1)A=“X123” (长度为4的串) (2)B=“12345654321” (长度为11的串) (3)C=“Bei Jing” (长度为8的串) (4)D=“” (长度为0的空串) (5)E=“This is a string” (长度为16的串) (6)F=“ is a ” (长度为6的串) 2.子串、主串和位置 串中任意连续的字符组成的子序列称为该串的子串;相应地,包含子串的串称为主串。串中的字符在串序列中的序号称为该字符在该串中的位置;子串的第一个字符在主串中的位置称为子串在主串中的位置。显然,串为其自身的子串,并规定空串为任何串的子串。显然,在不考虑空子串的情况下,一个长度为n的字符串具有n(n+1)/2个子串。 例如: 在上例的(6)中串F就是(5)中串E的子串,且子串F在主串E中的位置是5。由于空格符也是一个字符,所以在串G=“abc defghne”中包含有子串“c def”,而串“cdef”不是串G的子串。串G中第一个字符…e?的位置是6,第二个字符…e?的位置是11。 3.串的比较 如果两个串的长度相等且对应位置上的字符相同,则称这两个串相等。两个串A、B的比较过程是:从前往后逐个比较对应位置上的字符的ASCII码值,直到不相等或有一个字符串结束为止,此时的情况有以下几种: (1)两个串同时结束,表示A等于B; (2)A中字符的ASCII码值大于B中相应位置上字符的ASCII码值或B串结束,表示A大于B;(3)B中字符的ASCII码值大于A中相应位置上字符的ASCII码值或A串结束,表示A小于B。

数据结构_实验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;

顺序队的基本操作

上机实验报告 学院:计算机与信息技术学院 专业:计算机科学与技术(师范)课程名称:数据结构 实验题目:顺序队的基本操作 班级序号:师范1班 学号: 2731 学生姓名:邓雪 指导教师:杨红颖 完成时间: 2015年12月25号

一、实验目的: 1.熟悉掌握队的定义、结构及性质;? 2. 熟练掌握循环队列的操作及应用,掌握循环队列的入队和出队等基本操作。? 3. 加深对队列结构的理解,逐步培养解决实际问题的编程能力 二、实验环境: Windows Microsoft Visual c++ 三、实验内容及要求: 掌握队列的概念及性质,并建立顺序队,实现如下功能: 1.建立一个顺序队 2.输出队 3.求队长 4.判队空 5.取队头 6.入队 7.出队 8. 清空栈 四、概要设计: 1、通过循环,由键盘输入一串数据。创建并初始化一个顺序队。 2、编写实现相关功能函数,完成子函数模块如下。 3、调用子函数,实现菜单调用功能,完成顺序表的相关操作。

#include <> #include <> #define maxsize 1024 typedef int datatype; //定义结构体 typedef struct { datatype data[maxsize]; int front,rear; }sequeue; sequeue *sq; //建立顺序队 sequeue *SET() { sequeue *sq; datatype x; sq=(sequeue *)malloc(sizeof(sequeue)); sq->front=maxsize-1; sq->rear=maxsize-1; printf("请输入要存入的结点值(以0结尾)\n"); scanf("%d",&x); while(x!=0) { sq->rear=(sq->rear+1)%maxsize; sq->data[sq->rear]=x; scanf("%d",&x); } printf("顺序队输入成功\n\n"); return sq; }

串的基本操作

串的基本操作 一、实验目的、意义 (1)理解串的堆分配存储结构。 (2)理解用它们表示时插入,生成串,联接串与求子串的算法。 (3)根据具体问题的需要,能够设计出相关算法。 二、实验内容及要求 说明1:学生在上机实验时,需要自己设计出所涉及到的函数,同时设计多组输入数据并编写主程序分别调用这些函数,调试程序并对相应的输出作出分析;修改输入数据,预期输出并验证输出的结果,加深对有关算法的理解。 具体要求: 定义串的堆分配存储,完成串的基本操作:插入,生成串,联接串,求子串等。 三、实验所涉及的知识点 C语言算法、循环算法、串的堆分配存储结构、插入,生成串,联接串与求子串的算法。 四、实验结果及分析 (所输入的数据及相应的运行结果,运行结果要有提示信息,运行结果采用截图方式给出。) 五、总结与体会

(调试程序的心得与体会,若实验课上未完成调试,要认真找出错误并分析原因等。) 调试程序时,出现了许多错误。如:串的堆分配存储结构、串的联接等。另外还有一些语法上的错误。由于对所学知识点概念模糊,试验课上未能完成此次上机作业。后来经过查阅教材,浏览网页等方式,才完成试验。这次试验出现错误最重要的原因就是对课本知识点理解不深刻以及编写代码时的粗心。以后要都去练习、实践,以完善自己的不足。 六、程序清单(包含注释) #include #include #include typedef char Status; int strlen(char *p) { int i=0; while(*p++)i++; return i; } typedef struct { char *ch; // 若是非空串,则按串长分配存储区,否则ch为NULL int length; // 串长度 }HString; // 初始化(产生空串)字符串T void InitString(HString *T) { (*T).length=0; (*T).ch=NULL; } // 生成一个其值等于串常量chars的串T Status StrAssign(HString *T, char *chars) { int i,j; if((*T).ch) free((*T).ch); // 释放T原有空间 i = strlen(chars); // 求chars的长度i if(!i)

实验三 串基本操作的实现

实验三串基本操作的实现 专业:计算机科学与技术班级:10计本1班学号:姓名: 实验地点: B102 实验时间: 2011.11.2 指导教师:王润鸿 实验目的 1 理解定长顺序串的存储结构及基本操作的定义; 2掌握定长顺序串的基本操作; 3学会设计实验数据验证程序。 实验环境 计算机,window xp操作系统,VC++6.0 实验内容 1. 存储结构定义: #define MAXSTRLEN 255 //串的长度最大为255 typedef unsigned char SString[MAXSTRLEN+1]; //0号单元存放串的长度,其最大值刚好是255 2. 实现的基本操作: StrAssign (&T, chars) 初始条件:chars 是串常量。 操作结果:赋于串T的值为chars。 StrCopy (&T, S) 初始条件:串S 存在。 操作结果:由串S 复制得串T。 DestroyString (&S) 初始条件:串S 存在。 操作结果:串S 被销毁。 StrEmpty (S) 初始条件:串S 存在。 操作结果:若S 为空串,则返回TRUE,否则返回FALSE。 StrCompare (S, T) 初始条件:串S 和T 存在。 操作结果:若S>T,则返回值=0;若S=T,则返回值<0;若S

数据结构实现顺序表的各种基本运算(20210215233821)

实现顺序表的各种基本运算 一、实验目的 了解顺序表的结构特点及有关概念,掌握顺序表的各种基本操作算法思想及其实现。 二、实验内容 编写一个程序,实现顺序表的各种基本运算: 1、初始化顺序表; 2 、顺序表的插入; 3、顺序表的输出; 4 、求顺序表的长度 5 、判断顺序表是否为空; 6 、输出顺序表的第i位置的个元素; 7 、在顺序表中查找一个给定元素在表中的位置; 8、顺序表的删除; 9 、释放顺序表 三、算法思想与算法描述简图

主函数main

四、实验步骤与算法实现 #in clude #in clude #defi ne MaxSize 50 typedef char ElemType; typedef struct {ElemType data[MaxSize]; in t le ngth; void In itList(SqList*&L)〃 初始化顺序表 L {L=(SqList*)malloc(sizeof(SqList)); L->le ngth=0; for(i=0;ile ngth;i++) prin tf("%c ",L->data[i]); } void DestroyList(SqList*&L)〃 {free(L); } int ListEmpty(SqList*L)〃 {retur n( L->le ngth==O); } int Listle ngth(SqList*L)〃 {return(L->le ngth); } void DispList(SqList*L)〃 {int i; 释放顺序表 L

顺序表的建立及其基本操作技巧

山东师范大学 实验报告 课程:数据结构班级:2016级通信2班实验序号: 1 姓名:韩明达 学号: 201611030230 实验日期:9.17 题目: 顺序表的建立和运算 一、实验目的和要求 (1)熟悉C语言的上机环境,进一步掌握C语言的结构特点。 (2)掌握线性表的顺序存储结构的定义及基本运算 二、实验环境 Windows10,Visual Studio 2017 三、实验内容及实施 实验内容 1、建立一个顺序表,输入n个元素并输出; 2、查找线性表中的最大元素并输出; 3、在线性表的第i个元素前插入一个正整数x; 4、删除线性表中的第j个元素; 5、将线性表中的元素按升序排列; 【程序流程图】

【程序】 #include #include using namespace std; #define MAXSIZE 100 #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef struct { //定义顺序表结构 int data[MAXSIZE]; //存储空间的基地址; int length; //当前表长 }SqList; int InitList(SqList &L) //初始化顺序表 { L.length = 0; //当前长度为0 return OK; } void ShowList(SqList &L) //显示顺序表 { cout << "您构建的顺序表为:" << endl; //提示int i; for (i = 0; i < L.length; i++) { cout << L.data[i] << " ";

实验二 栈与队列操作实验题目

实验二栈与队列操作 实验目的: (1)理解栈与队列的结构特征和运算特征,以便在实际问题背景下灵活运用。 (2)了解复杂问题的递归算法设计。 本次实验中,下列实验项目选做一。 1、顺序栈的基本操作 [问题描述] 设计算法,实现顺序栈的各种基本操作 [基本要求] (1)初始化栈s。 (2)从键盘输入10个字符以$结束,建立顺序栈。 (3)从键盘输入1个元素,执行入栈操作。 (4)将栈顶元素出栈。 (5)判断栈是否为空。 (6)输出从栈顶到栈底元素。 要求程序通过一个主菜单进行控制,在主菜单界面通过选择菜单项的序号来调用各功能函数。 2、链栈的基本操作 [问题描述] 设计算法,实现链栈的各种基本操作 [基本要求] (1)初始化栈s。 (2)从键盘输入10个字符以$结束,建立带头结点的链栈。 (3)从键盘输入1个元素,执行入栈操作。 (4)完成出栈操作。 (5)判断栈是否为空。 (6)输出从栈顶到栈底元素。 (7)输出链栈的长度。 要求程序通过一个主菜单进行控制,在主菜单界面通过选择菜单项的序号来调用各功能函数。 3、循环队列的基本操作 [问题描述] 设计算法,实现循环顺序队列的建立、入队、出队等操作。 [基本要求] (1)从键盘输入10个字符以$结束,建立循环队列,并显示结果。 (2)从键盘输入1个元素,执行入队操作,并显示结果。 (3)将队头元素出队,并显示结果。 (4)要求程序通过一个主菜单进行控制,在主菜单界面通过选择菜单项的序号来调用各功能函数。

4、只用尾指针表示的循环链表队列的综合操作 [问题描述] 假设以带头结点的的循环链表表示队列,并且只设一个指针指向队尾元素的结点(注意不设头指针),试编写队列初始化、入队、出队函数。 [基本要求及提示] (1)首先定义链表结点类型。 (2)编写带头结点的循环链表的初始化函数,只用尾指针表示。 (3)编写入队函数、出队函数。 (4)在主函数中编写菜单(1.初始化;2.入队;3.出队;4.退出),调用上述功能函数。 5、用标志域表示队空队满状态的循环队列的综合操作 [问题描述] 要求循环队列不损失一个空间全部都得到利用,设置一个标志域tag,以0和1来区分当队头与队尾指针相同时队列状态的空和满,试编写与此结构相对应的入队和出队操作。 [基本要求及提示] (1)教材中为区分当队头与队尾指针相同时队列状态的空和满,以牺牲一个空间的代价来实现的,空:Q->front==Q->rear,满:(Q->rear+1)%MAXSIZE==Q->front。 (2)本题不损失一个空间全部都得到利用,为此如下定义循环队列类型: Typedef struct { QueueElementType element[MAXSIZE]; int front; int rear; int tag; }SeqQueue; 此时,循环队列空和满的条件分别为: Q->front==Q->rear&&tag==0 和 Q->front==Q->rear&&tag==1 (3)编写入队函数、出队函数。 (4)在主函数中编写菜单(1.入队;2.出队;3.退出),调用上述功能函数。 6、利用辅助数组进行栈的逆置 [问题描述] 利用辅助栈将栈中的元素逆置。 [基本要求及提示] 在主函数中编写菜单(1.入栈;2.出栈;3.逆置;4.退出)调试运行程序。 7、利用辅助栈进行队列的逆置 [问题描述] 利用辅助栈进行队列元素逆置。 [基本要求及提示] 在主函数中编写菜单(1.入队;2.出队;3.逆置;4.退出)调试运行程序。 8、Hanoi塔问题

数据结构3-串及其应用.

实验3:串及其应用 一、实验目的 掌握串类型的实现方法和文本模式匹配方法,熟悉一般文字处理软件的设计方法。 二、问题描述 全屏幕文本编辑器通过终端对文本文件进行创建、插入、删除、修改、存储等操作。用户可完成对文本的插入、删除、修改等功能。 三、实验要求 1、对光标实现如下操作:上、下、左、右移动一个字符位置;向前、后翻页;光标移 至文件首、尾;光标移至本行首、尾。 2、实现基本编辑命令: I----在当前光标前插入内容,按ESC结束 F----在当前光标后插入内容,按ESC结束 D----删除光标所在行 ND---删除光标位置开始的n行 N-----删除光标上的字符 W----将修改后的文本保存下来 Q----退出编辑状态。 四、实验环境

PC微机 DOS操作系统或Windows 操作系统 Turbo C 程序集成环境或Visual C++ 程序集成环境 五、实验步骤 1、在内存开辟可容纳80行大小的编辑工作区和buffer 的修改缓冲区。 2、要求用户输入编辑文件名,对读入的文件建立相应的页表和行表,在文本编辑程序 中设立页指针、行指针、字符指针,分别指示当前操作的页、行、字符。 3、执行插入、删除、修改操作时,将本次操作内容放到缓冲区; 4、操作确定后,将修改后的文本存到文件中。 六、测试数据 自行设定。 七、实验报告要求 实验报告应包括以下几个部分: 1、问题描述; 2、算法的设计描述; 3、测试结果的分析与讨论。 4、设计与实现过程中的体会,进一步的改进设想。 5、实验总结。

八、思考题 1、对命令格式非法等错误做严格检查和适当处理。 2、扩充编辑操作,如对某行进行串替换?

顺序表的基本操作

《数据结构》实验报告一 顺序表的基本操作 班级:网络工程学号: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 #include typedef int datatype; #define maxsize 10 typedef struct //创建一个顺序表包含10个整数

实验4顺序循环队列基本操作

实验4: 顺序循环队列基本操作 一、实验目的 1.熟悉并能实现顺序循环队列的定义和基本操作。 2.了解用队列解决实际应用问题。 二、实验要求 1.进行队列的基本操作时要注意队列“先进先出”的特性。 2.复习关于栈操作的基础知识。 3.编写完整程序完成下面的实验内容并上机运行。 4.整理并上交实验报告。 三、实验内容 1.任意输入队列长度和队列中的元素值,构造一个队列,对其进行清空、插入新元素、返回队头元素以及删除队头元素操作。 2.约瑟夫环的实现:设有n个人围坐在圆桌周围,现从某个位置i 上的人开始报数,数到m 的人就站出来。下一个人,即原来的第m+1个位置上的人,又从1开始报数,再是数到m的人站出来。依次重复下去,直到全部的人都站出来,按出列的先后又可得到一个新的序列。由于该问题是由古罗马著名的史学家Josephus提出的问题演变而来,所以通常称为 Josephus 问题。 例如:当n=8,m=4,i=1时,得到的新序列为: 4,8,5,2,1,3,7,6 编写程序选择循环队列(也可换为自己熟悉的数据结构)作为存储结构模拟整个过程,并依次输出出列的各人的编号。 3.(选做实验)设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。 程序编写提示:以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表实现。需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。输入数据按到达或离去的时刻有序。栈中每个元素表示一辆汽车,包含两个数据项:汽车的牌照号码和进入停车场的时刻。

顺序表的基本操作 (2)

顺序表的基本操作 /*sqList.h 文件*/ #define LIST_INIT_SIZE 50 /*初始分配的顺序表长度*/ #define INCREM 10 /*溢出时,顺序表长度的增量*/ #define OVERFLOW 1 #define OK 0 #define ERROR -1 typedef int ElemType; /*定义表元素的类型*/ typedef struct SqList{ ElemType *elem; /*存储空间的基地址*/ int length; /*顺序表的当前长度*/ int listsize; /*当前分配的存储空间*/ }SqList; /*sqListOp.h 文件*/ #include "Sqlist.h" int InitList_sq(SqList &L); //顺序表创建函数定义 void FreeList_sq(SqList &L); //顺序表销毁函数定义 int ListInsert_sq(SqList &L, int i, ElemType e); //在顺序表的位置i插入元素e void PrintList_sq(SqList &L); //遍历并输出顺序表所有元素 int ListDelete_sq(SqList &L, int i,ElemType &e); //删除顺序表第i个元素的 bool ListEmpty(SqList &L); //判断顺序表是否为空 int LocateElem_sq(SqList L,ElemType e); //在顺序表里查找出第1个与e相等的数据元素位置//已知线性表La和Lb的元素按值非递减排列 //归并后的La和Lb得到新的顺序线性表Lc,Lc的元素也是按值非递减排列 void MergeList_sq(SqList La,SqList Lb, SqList &Lc); /*sqListOp.cpp文件*/ #include #include #include #include "sqlistOp.h" //创建顺序表 int InitList_sq(SqList &L) { L.elem = (ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if (!L.elem) exit(OVERFLOW); /*初始化失败,返回0*/ L.length = 0; /*置空表长度为0*/ L.listsize = LIST_INIT_SIZE; /*置初始空间容量*/ return OK; /*初始化成功,返回1*/

数据结构串基本操作代码

实验三串 //串的基本操作 #include "stdio.h" #include "stdlib.h" #define MAXSTRLEN 255 typedef unsigned char SString[MAXSTRLEN+1]; void strlength(SString S)//求字串并放到 S[0] 中 { int m; for(m=1;S[m]!='\0';m++); S[0]=m-1; } void insert(SString S,int n,char a)//是插入的位置 a 是插入的字符{ strlength(S); int i; for(i=S[0];i>=n;i--) S[i+1]=S[i]; S[n]=a; S[S[0]+2]='\0'; } int compare(SString S,SString T) { strlength(S); strlength(T); int i; for(i=1;i<=S[0]&&i<=T[0];i++) { if(S[i]>T[i]) return 1; if(S[i]T[0]) return 1;

else if(S[0]S[0]||len<0||len>S[0]-pos+1) { printf("Error!position or length is out of range\n"); return 0; } for(i=1;i<=len;i++)

串的基本操作

i 串的基本操作 一、 实验目的、意义 (1) 理解串的堆分配存储结构。 (2) 理解用它们表示时插入,生成串,联接串与求子串的算法。 (3) 根据具体问题的需要,能够设计出相关算法。 二、 实验内容及要求 说明1:学生在上机实验时,需要自己设计出所涉及到的函数,同时设计多组输 入数据并编写主程序分别调用这些函数,调试程序并对相应的输出作出分析;修 改输入数据,预期输出并验证输出的结果,加深对有关算法的理解。 具体要求: 定义串的堆分配存储,完成串的基本操作:插入,生成串,联接串,求子串 三、实验所涉及的知识点 C 语言算法、循环算法、串的堆分配存储结构、插入,生成串,联接 串与求子串的算法。 四、实验结果及分析 (所输入的数据及相应的运行结果,运行结果要有提示信息,运行结果采用截图 方式给出。) F 'E=?JK^?t?iS^?Deb ug?T extl .e κe 1 n 呂扇: c-?S 》爭t -託联接串0产主的串片为:GOd bιje!God luck? :GOd bj/ef &串空否? ?<1: X 肌否) GDd Inch? ?s70 ≡ OO ??串t 相同的子串用串討弋普后.串晚: GQqd by^tGood Iucl

顺序表基本操作的实现

1、顺序表基本操作的实现 [问题描述] 在顺序表中查找值为x的元素的位置,在线性表的某个位置插入一个元素,删除线性表某个位置的元素。 [基本要求] 要求建立生成顺序表,可以键盘上读取元素,用顺序存储结构实现存储。 [实现提示] 要实现基本操作,可用实现的基本操作,也可设计简单的算法实现。[建议步骤] 1)建立顺序表的存储结构; 2)利用1)的存储结构建立有实际数据的数据表; 3)实现查找操作; 4)实现插入操作; 5)实现删除操作。 6)写出main函数测试上述操作。 实验源码: #include #define MAX 300 typedef int ElemType; typedef struct { ElemType data[MAX]; int length; }SqList; SqList L; //打印菜单 void menu() { printf("**************************************\n"); printf(" 顺序表操作的验证实验\n"); printf("**************************************\n"); printf(" 1、初始化表\n"); printf(" 2、创建表\n"); printf(" 3、按值查询\n"); printf(" 4、在指定位置插入一个元素\n"); printf(" 5、删除指定位置上的一个元素\n"); printf(" 6、输出表\n"); printf(" 0、退出\n"); printf("***************************************\n"); } //初始化表,置表长为0 void Init(SqList *L)

实验四 串及其应用

实验4:串及其应用 一、实验目的 掌握串类型的实现方法和文本模式匹配方法,熟悉一般文字处理软件的设计方法。二、问题描述 全屏幕文本编辑器通过终端对文本文件进行创建、插入、删除、修改、存储等操作。用户可完成对文本的插入、删除、修改等功能。 三、实验要求 1、对光标实现如下操作:上、下、左、右移动一个字符位置;向前、后翻页;光标移 至文件首、尾;光标移至本行首、尾。 2、实现基本编辑命令: I----在当前光标前插入内容,按ESC结束 F----在当前光标后插入内容,按ESC结束 D----删除光标所在行 ND---删除光标位置开始的n行 N-----删除光标上的字符 W----将修改后的文本保存下来 Q----退出编辑状态。 四、实验环境 PC微机 DOS操作系统或Windows 操作系统 Turbo C 程序集成环境或Visual C++ 程序集成环境 五、实验步骤 1、在内存开辟可容纳80行大小的编辑工作区和buffer 的修改缓冲区。 2、要求用户输入编辑文件名,对读入的文件建立相应的页表和行表,在文本编辑程序 中设立页指针、行指针、字符指针,分别指示当前操作的页、行、字符。 3、执行插入、删除、修改操作时,将本次操作内容放到缓冲区; 4、操作确定后,将修改后的文本存到文件中。 六、测试数据 自行设定。 七、算法设计 串的基本操作: 一、串赋值:

Status StrAssign(HString &T,char *chars) { // 生成一个其值等于串常量chars的串T int i,j; if(T.ch) free(T.ch); // 释放T原有空间 i=strlen(chars); // 求chars的长度i if(!i) { // chars的长度为0 T.ch=NULL; T.length=0; } else { // chars的长度不为0 T.ch=(char*)malloc(i*sizeof(char)); // 分配串空间 if(!T.ch) // 分配串空间失败 exit(OVERFLOW); for(j=0;j #include #include #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等 struct HString { char *ch; // 若是非空串,则按串长分配存储区,否则ch为NULL int length; // 串长度 }; /***************文本编辑器的程序 **********************/ #define MAX_LEN 50 // 文件最大行数 #define LINE_LEN 80 // 每行字符数最大值+1 #define NAME_LEN 20 // 文件名最大长度(包括盘符、路径)+1 Status StrAssign(HString &T,char *chars) { // 生成一个其值等于串常量chars的串

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

湖南第一师范学院信息科学与工程系实验报告 课程名称:数据结构与算法成绩评定: 实验项目名称:顺序表的基本操作指导教师:王杰文 学生姓名:沈丽桃学号:10403080118 专业班级:教育技术 实验项目类型:验证性实验地点:科B305 实验时间: 2011年 10月8 日一、实验目的与要求: 实验目的:实现顺序表的创建、查找、插入、删除与输出 基本原理:顺序表的基本操作 二、实验环境:(硬件环境、软件环境) 1.硬件环境:奔ⅣPC。 2.软件环境:Windows XP 操作系统,TC2.0或VC++。 三、实验内容:(原理、操作步骤、程序代码等) #include # 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”);

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