数据结构实验报告3--链串

合集下载

数据结构实验实训报告范文

数据结构实验实训报告范文

一、实验目的1. 理解并掌握数据结构的基本概念和常用算法。

2. 学会使用C语言实现线性表、栈、队列、树和图等基本数据结构。

3. 培养动手实践能力,提高编程水平。

二、实验内容1. 线性表(1)顺序表(2)链表2. 栈(1)顺序栈(2)链栈3. 队列(1)顺序队列(2)链队列4. 树(1)二叉树(2)二叉搜索树5. 图(1)邻接矩阵表示法(2)邻接表表示法三、实验环境1. 操作系统:Windows 102. 编程语言:C语言3. 编译器:Visual Studio 20194. 实验软件:C语言开发环境四、实验步骤1. 线性表(1)顺序表1)定义顺序表结构体2)实现顺序表的初始化、插入、删除、查找等基本操作3)编写测试程序,验证顺序表的基本操作(2)链表1)定义链表结构体2)实现链表的创建、插入、删除、查找等基本操作3)编写测试程序,验证链表的基本操作2. 栈(1)顺序栈1)定义顺序栈结构体2)实现顺序栈的初始化、入栈、出栈、判空等基本操作3)编写测试程序,验证顺序栈的基本操作(2)链栈1)定义链栈结构体2)实现链栈的初始化、入栈、出栈、判空等基本操作3)编写测试程序,验证链栈的基本操作3. 队列(1)顺序队列1)定义顺序队列结构体2)实现顺序队列的初始化、入队、出队、判空等基本操作3)编写测试程序,验证顺序队列的基本操作(2)链队列1)定义链队列结构体2)实现链队列的初始化、入队、出队、判空等基本操作3)编写测试程序,验证链队列的基本操作4. 树(1)二叉树1)定义二叉树结构体2)实现二叉树的创建、遍历、查找等基本操作3)编写测试程序,验证二叉树的基本操作(2)二叉搜索树1)定义二叉搜索树结构体2)实现二叉搜索树的创建、遍历、查找等基本操作3)编写测试程序,验证二叉搜索树的基本操作5. 图(1)邻接矩阵表示法1)定义邻接矩阵结构体2)实现图的创建、添加边、删除边、遍历等基本操作3)编写测试程序,验证邻接矩阵表示法的基本操作(2)邻接表表示法1)定义邻接表结构体2)实现图的创建、添加边、删除边、遍历等基本操作3)编写测试程序,验证邻接表表示法的基本操作五、实验结果与分析1. 线性表(1)顺序表实验结果表明,顺序表的基本操作实现正确,测试程序运行稳定。

数据结构 串 实验报告

数据结构 串 实验报告

实验报告实验名称:串实验目的:(1)、熟悉C语言的上机环境,进一步掌握C语言的结构特点;(2)、掌握串的定义及C语言实现;(3)、掌握串的模式匹配及C语言实现;(4)、掌握串的各种基本操作;实验步骤:(1)、建立链串类型(2)、实现匹配过程中需考虑的链表的特征。

实验内容:4.一个字符串中的任意一个子序列,若子序列中各字符值均相同,则成为字符平台。

写一算法,输入任意以字符串S,输出S中长度最大的所有字符平台的起始位置及所含字符。

注意,最大字符平台有可能不止一个。

实验数据记录:(源代码及执行过程)#include<stdio.h>#include<stdlib.h>#define Maxsize 20#define n 100typedef struct Node{int element[Maxsize];int front;int rear;}Queue;int EnterQueue(Queue *Q,int x){if((Q->rear+1)%Maxsize == Q->front){printf("队列已满!\n");return 0;}Q->element[Q->rear] = x;Q->rear = (Q->rear+1)%Maxsize;return 1;}int DeleQueue(Queue *Q,int *x){if(Q->front == Q->rear){printf("队列为空!\n");return 0;}*x = Q->element[Q->front];Q->front = (Q->front+1)%Maxsize;return 1;}int Donull(Queue *Q){while(Q->front != Q->rear){Q->element[Q->front] = 0;Q->front = (Q->front+1)%Maxsize;}Q->front = Q->rear = 0;if(Q->front == Q->rear){return 1;}else{return 0;}}int main(void){char str[n];int i=0,j=1,k=1,ch,p=1,flag=1;Queue *Q;Q = (Queue *)malloc(sizeof(Queue));Q->front = Q->rear = 0;printf("请输入字符串:");gets(str);while('\0' != *(str+i)){ while(*(str+i+1) == *(str+i)){if(flag){p = i;flag = 0;}i++;j++;}if(flag){p = i;}if(j >= k){if(j > k){Donull(Q);k = j;}if(EnterQueue(Q ,j) == 0)break;if(EnterQueue(Q,p+1) == 0)break;if(EnterQueue(Q,*(str+i)) == 0)break;}j=1;i++;flag = 1;} while(Q->front < Q->rear){DeleQueue(Q,&j);DeleQueue(Q,&k);DeleQueue(Q,&ch);printf("%-10d",k);for(i = 0; i < j; i++){printf("%c",ch);}printf("\n");}printf("\n");system("pause");}。

数据结构实验报告实验总结

数据结构实验报告实验总结

数据结构实验报告实验总结本次数据结构实验主要涉及线性表、栈和队列的基本操作以及链表的应用。

通过实验,我对这些数据结构的特点、操作和应用有了更深入的了解。

下面对每一部分实验进行总结。

实验一:线性表的基本操作线性表是一种常见的数据结构,本实验要求实现线性表的基本操作,包括插入、删除、查找、遍历等。

在实验过程中,我对线性表的结构和实现方式有了更清晰的认识,掌握了用数组和链表两种方式实现线性表的方法。

实验二:栈的应用栈是一种后进先出(LIFO)的数据结构,本实验要求利用栈实现简单的括号匹配和后缀表达式计算。

通过实验,我了解到栈可以方便地实现对于括号的匹配和后缀表达式的计算,有效地解决了对应的问题。

实验三:队列的应用队列是一种先进先出(FIFO)的数据结构,本实验要求利用队列实现银行排队和迷宫求解。

通过实验,我对队列的应用有了更加深入的了解,了解到队列可以解决需要按顺序处理的问题,如排队和迷宫求解等。

实验四:链表的应用链表是一种常用的数据结构,本实验要求利用链表实现学生信息管理系统。

通过实验,我对链表的应用有了更深入的了解,了解到链表可以方便地实现对于数据的插入、删除和修改等操作,并且可以动态地调整链表的长度,适应不同的需求。

通过本次实验,我掌握了线性表、栈、队列和链表的基本操作,并了解了它们的特点和应用方式。

同时,通过实际编程的过程,我对于数据结构的实现方式和效果有了更直观的认识,也锻炼了自己的编程能力和解决问题的能力。

在实验过程中,我遇到了一些问题,如程序逻辑错误和内存泄漏等,但通过调试和修改,最终成功解决了这些问题,对自己的能力也有了更多的信心。

通过本次实验,我深刻体会到了理论与实践的结合的重要性,也对于数据结构这门课程有了更加深入的理解。

总之,本次数据结构实验给予了我很多有益的启发和收获,对于数据结构的概念、特点和应用有了更深入的理解。

在以后的学习中,我会继续加强对数据结构的学习和研究,不断提高自己的编程能力和解决问题的能力。

C语言数据结构----链栈实验报告

C语言数据结构----链栈实验报告

#include<stdio.h>#include<stdlib.h>#include<time.h>typedef int elemtype;typedef struct node{elemtype data;struct node *next;}node,*linkstack;linkstack *top;//链栈初始化node init_linkstack(){node top;top.next=NULL;return top;}//判栈空int linkstack_pankong(node top) {if(top.next==NULL)return 1;elsereturn 0;}//输出链栈元素void print_linkstack(node *top) {node *p;for(p=top->next;p;p=p->next){printf("%d\t",p->data);}}//入栈void puts_link(node *top,int a){node *p;p=(node *)malloc(sizeof(node));if(p==NULL){}else{p->data=a;p->next=top->next;top->next=p;}}//链栈逆序node nixu_link(node *a){node s,*r;s=init_linkstack();for(r=a->next;r;r=r->next){puts_link(&s,r->data);}return s;}//主函数部分void main(){elemtype x,i,n,a;node top;srand((unsigned)time(NULL));/*初始化链栈*/top=init_linkstack();printf("申请链栈内存空间成功\n");elemtype t;do{printf("\n\t请选择以下选项:\n\t1.生成链栈且输出\n\t2.将链栈逆序输出\n\t0.退出程序\n");printf("请输入对应选项:");scanf("%d",&t);switch(t){case 1:{printf("请输入需要生成随机数的数量: ");scanf("%d",&n);for(i=0;i<n;i++){a=rand()%50;puts_link(&top,a); //调用入栈函数,将随机数入栈}printf("链栈当前内容如下:\n");print_linkstack(&top);}continue;case 2:{if(linkstack_pankong(top)){printf("当前链栈内容是空的!");continue;}printf("链栈逆序输出为:\n");top=nixu_link(&top);print_linkstack(&top);}continue;case 0:break;}}while(t!=0);}。

数据结构串的实验总结

数据结构串的实验总结

数据结构串的实验总结《数据结构串的实验总结》整体感受嘛,这数据结构中的串实验就像一场充满挑战与惊喜的旅程。

开始的时候,真觉得有些头疼,就像面对一个错综复杂的迷宫,完全不知道从哪儿入手。

具体收获可真是不少。

首先,我对串的基本概念有了透彻的理解,什么是串,串的长度、空串、空格串等等。

在实现串的操作时,比如串的连接、匹配之类的,那可真是让我费了不少心思。

比如说在实现串的模式匹配算法中的BF算法时,我才清楚需要挨个比较字符,就像在人群中逐个查找一个特定的人一样辛苦但又很有成就感。

还有KMP算法,这个算法刚开始理解简直难上天了,它那复杂的部分匹配值计算和next数组的构建,但是一旦理解了它的精髓,就感觉像发现了一个快捷通道。

原来KMP 算法就是利用已经比较过的信息,避免不必要的比较,就像你走过一遍迷宫,记住了哪些路是死胡同,下次走的时候就可以避开了。

重要发现也得记一笔。

在做串的存储结构实验的时候,我发现顺序存储结构在某些情况下很方便,比如串的长度固定或者不需要频繁插入删除的时候。

而链式存储结构则在灵活处理串的变化方面更有优势,这就像是住在公寓和房车的区别,一个固定但是稳定,一个虽然变动大但是更灵活,可以随时根据需求调整内部布局。

反思一下,自己在做实验的过程中太过于关注实现结果而忽略了算法的时间复杂度和空间复杂度优化。

比如在BF算法中,如果字符串很长,那简单的逐个比较效率是非常低的,当时怎么就没有多想想怎么优化呢,真是太不应该了。

现在想想,如果当时能从一开始就着重关注效率方面的问题,后面可能就不需要花这么多时间返工了。

从这个串的实验中得到的启示就是做事情之前一定要考虑全面。

遇到难题的时候不要害怕,像理解KMP算法一样,多花时间多思考,总能找到解决方案的。

而且在解决问题的过程中,要不断思考有没有更好更高效的方法,不能仅仅满足于把功能实现了就好。

要从各个方面去考量,就像看待一个人的综合素质一样,不仅要看他能不能完成任务,还要看他完成任务的质量和效率。

串-数据结构实验报告

串-数据结构实验报告

串-数据结构实验报告串数据结构实验报告一、实验目的本次实验的主要目的是深入理解和掌握串这种数据结构的基本概念、存储方式以及相关的操作算法。

通过实际编程实现串的基本操作,提高对数据结构的理解和编程能力,培养解决实际问题的思维和方法。

二、实验环境本次实验使用的编程语言为C++,开发工具为Visual Studio 2019。

三、实验原理(一)串的定义串是由零个或多个字符组成的有限序列。

在本次实验中,我们主要关注的是字符串。

(二)串的存储方式1、顺序存储定长顺序存储:使用固定长度的数组来存储字符串,长度不足时用特定字符填充。

堆分配存储:根据字符串的实际长度动态分配存储空间。

2、链式存储每个节点存储一个字符,并通过指针链接起来。

(三)串的基本操作1、串的创建和初始化2、串的赋值3、串的连接4、串的比较5、求子串6、串的插入和删除四、实验内容及步骤(一)顺序存储方式下串的实现1、定义一个结构体来表示顺序存储的字符串,包含字符数组和字符串的实际长度。

```cppstruct SeqString {char str;int length;};```2、实现串的创建和初始化函数```cppSeqString createSeqString(const char initStr) {int len = strlen(initStr);SeqString s;sstr = new charlen + 1;strcpy(sstr, initStr);slength = len;return s;}```3、串的赋值函数```cppvoid assignSeqString(SeqString& s, const char newStr) {delete sstr;int len = strlen(newStr);sstr = new charlen + 1;strcpy(sstr, newStr);slength = len;}```4、串的连接函数```cppSeqString concatSeqString(const SeqString& s1, const SeqString& s2) {SeqString result;resultlength = s1length + s2length;resultstr = new charresultlength + 1;strcpy(resultstr, s1str);strcat(resultstr, s2str);return result;}```5、串的比较函数```cppint compareSeqString(const SeqString& s1, const SeqString& s2) {return strcmp(s1str, s2str);}```6、求子串函数```cppSeqString subSeqString(const SeqString& s, int start, int len) {SeqString sub;sublength = len;substr = new charlen + 1;strncpy(substr, sstr + start, len);substrlen ='\0';return sub;}```7、串的插入函数```cppvoid insertSeqString(SeqString& s, int pos, const SeqString& insertStr) {int newLength = slength + insertStrlength;char newStr = new charnewLength + 1;strncpy(newStr, sstr, pos);strcpy(newStr + pos, insertStrstr);strcpy(newStr + pos + insertStrlength, sstr + pos);delete sstr;sstr = newStr;slength = newLength;}```8、串的删除函数```cppvoid deleteSeqString(SeqString& s, int start, int len) {int newLength = slength len;char newStr = new charnewLength + 1;strncpy(newStr, sstr, start);strcpy(newStr + start, sstr + start + len);delete sstr;sstr = newStr;slength = newLength;}```(二)链式存储方式下串的实现1、定义一个节点结构体```cppstruct LinkNode {char data;LinkNode next;LinkNode(char c) : data(c), next(NULL) {}};```2、定义一个链式存储的字符串类```cppclass LinkString {private:LinkNode head;int length;public:LinkString(const char initStr);~LinkString();void assign(const char newStr);LinkString concat(const LinkString& other);int compare(const LinkString& other);LinkString subString(int start, int len);void insert(int pos, const LinkString& insertStr);void deleteSub(int start, int len);};```3、实现各个函数```cppLinkString::LinkString(const char initStr) {length = strlen(initStr);head = NULL;LinkNode p = NULL;for (int i = 0; i < length; i++){LinkNode newNode = new LinkNode(initStri);if (head == NULL) {head = newNode;p = head;} else {p>next = newNode;p = p>next;}}}LinkString::~LinkString(){LinkNode p = head;while (p) {LinkNode temp = p;p = p>next;delete temp;}}void LinkString::assign(const char newStr) {//先释放原有的链表LinkNode p = head;while (p) {LinkNode temp = p;p = p>next;delete temp;}length = strlen(newStr);head = NULL;p = NULL;for (int i = 0; i < length; i++){LinkNode newNode = new LinkNode(newStri);if (head == NULL) {head = newNode;p = head;} else {p>next = newNode;p = p>next;}}}LinkString LinkString::concat(const LinkString& other) {LinkString result;LinkNode p1 = head;LinkNode p2 = otherhead;LinkNode p = NULL;while (p1) {LinkNode newNode = new LinkNode(p1->data);if (resulthead == NULL) {resulthead = newNode;p = resulthead;} else {p>next = newNode;p = p>next;}p1 = p1->next;}while (p2) {LinkNode newNode = new LinkNode(p2->data);if (resulthead == NULL) {resulthead = newNode;p = resulthead;} else {p>next = newNode;p = p>next;}p2 = p2->next;}resultlength = length + otherlength;return result;}int LinkString::compare(const LinkString& other) {LinkNode p1 = head;LinkNode p2 = otherhead;while (p1 && p2 && p1->data == p2->data) {p1 = p1->next;p2 = p2->next;}if (p1 == NULL && p2 == NULL) {return 0;} else if (p1 == NULL) {return -1;} else if (p2 == NULL) {return 1;} else {return p1->data p2->data;}}LinkString LinkString::subString(int start, int len) {LinkString sub;LinkNode p = head;for (int i = 0; i < start; i++){p = p>next;}for (int i = 0; i < len; i++){LinkNode newNode = new LinkNode(p>data);if (subhead == NULL) {subhead = newNode;} else {LinkNode temp = subhead;while (temp>next) {temp = temp>next;}temp>next = newNode;}p = p>next;}sublength = len;return sub;}void LinkString::insert(int pos, const LinkString& insertStr) {LinkNode p = head;for (int i = 0; i < pos 1; i++){p = p>next;}LinkNode insertHead = insertStrhead;while (insertHead) {LinkNode newNode = new LinkNode(insertHead>data);newNode>next = p>next;p>next = newNode;p = p>next;insertHead = insertHead>next;}length += insertStrlength;}void LinkString::deleteSub(int start, int len) {LinkNode p = head;for (int i = 0; i < start 1; i++){p = p>next;}LinkNode temp = p>next;for (int i = 0; i < len; i++){LinkNode delNode = temp;temp = temp>next;delete delNode;}p>next = temp;length = len;}```(三)测试用例1、顺序存储方式的测试```cppint main(){SeqString s1 = createSeqString("Hello");SeqString s2 = createSeqString("World");SeqString s3 = concatSeqString(s1, s2);std::cout <<"连接后的字符串: "<< s3str << std::endl; int cmpResult = compareSeqString(s1, s2);if (cmpResult < 0) {std::cout <<"s1 小于 s2" << std::endl;} else if (cmpResult == 0) {std::cout <<"s1 等于 s2" << std::endl;} else {std::cout <<"s1 大于 s2" << std::endl;}SeqString sub = subSeqString(s1, 1, 3);std::cout <<"子串: "<< substr << std::endl; insertSeqString(s1, 2, s2);std::cout <<"插入后的字符串: "<< s1str << std::endl; deleteSeqString(s1, 3, 2);std::cout <<"删除后的字符串: "<< s1str << std::endl; return 0;}```2、链式存储方式的测试```cppint main(){LinkString ls1("Hello");LinkString ls2("World");LinkString ls3 = ls1concat(ls2);std::cout <<"连接后的字符串: ";LinkNode p = ls3head;while (p) {std::cout << p>data;p = p>next;}std::cout << std::endl;int cmpResult = ls1compare(ls2);if (cmpResult < 0) {std::cout <<"ls1 小于 ls2" << std::endl;} else if (cmpResult == 0) {std::cout <<"ls1 等于 ls2" << std::endl;} else {std::cout <<"ls1 大于 ls2" << std::endl;}LinkString sub = ls1subString(1, 3);std::cout <<"子串: ";p = subhead;while (p) {std::cout << p>data;p = p>next;}std::cout << std::endl;ls1insert(2, ls2);std::cout <<"插入后的字符串: ";p = ls1head;while (p) {std::cout << p>data;p = p>next;}std::cout << std::endl;ls1deleteSub(3, 2);std::cout <<"删除后的字符串: ";p = ls1head;while (p) {std::cout << p>data;p = p>next;}std::cout << std::endl;return 0;}```五、实验结果及分析(一)顺序存储方式1、连接操作成功实现,输出了正确连接后的字符串。

数据结构串实验报告

数据结构串实验报告

数据结构串实验报告数据结构串实验报告引言:数据结构是计算机科学中的重要概念之一,它研究如何组织和存储数据,以便能够高效地访问和操作。

串是一种特殊的数据结构,它由一系列字符组成,可以用来表示文本、字符串等信息。

本实验旨在通过实现串的基本操作,深入理解数据结构的原理和应用。

一、实验目的本实验的主要目的是掌握串的基本操作,包括串的初始化、插入、删除、查找等。

通过实际编程实现这些操作,可以加深对数据结构的理解,并提高编程能力。

二、实验环境本实验使用C语言进行编程,需要在计算机上安装相应的开发环境,如GCC编译器等。

三、实验内容1. 串的初始化串的初始化是指将一个空串创建出来,并为其分配内存空间。

在实验中,可以使用字符数组来表示串,并通过赋值操作将空串初始化。

2. 串的插入串的插入是指在指定位置插入一个或多个字符。

在实验中,可以通过遍历数组,将插入位置之后的字符依次后移,然后将待插入的字符放入指定位置。

3. 串的删除串的删除是指删除指定位置的一个或多个字符。

在实验中,可以通过遍历数组,将删除位置之后的字符依次前移,覆盖待删除的字符。

4. 串的查找串的查找是指在串中查找指定字符或子串,并返回其位置。

在实验中,可以通过遍历数组,逐个比较字符或子串,找到匹配的位置。

五、实验步骤1. 初始化串首先,创建一个字符数组,并将其初始化为空串。

2. 插入字符在指定位置插入一个字符,可以通过遍历数组,将插入位置之后的字符依次后移,然后将待插入的字符放入指定位置。

3. 删除字符删除指定位置的一个字符,可以通过遍历数组,将删除位置之后的字符依次前移,覆盖待删除的字符。

4. 查找字符在串中查找指定字符,可以通过遍历数组,逐个比较字符,找到匹配的位置。

六、实验结果经过实验,我们成功实现了串的初始化、插入、删除和查找等基本操作。

通过不断调试和优化,我们的程序能够高效地处理大量的字符操作,具有较好的性能和稳定性。

七、实验总结通过本次实验,我们深入理解了数据结构中串的原理和应用。

数据结构链表实验报告

数据结构链表实验报告

实验报告填写说明(实验项目名称、实验项目类型必须与实验教学大纲保持一致)1.实验环境:实验用的软、硬件环境。

2.实验目的:根据实验教学大纲,写出实验的要求和目的。

3.实验原理:简要说明本实验项目所涉及的理论知识。

4.实验方案:这是实验报告极其重要的容。

对于验证性验,要写清楚操作方法,需要经过哪几个步骤来实现其操作。

对于设计性和综合性实验,还应写出设计思路和设计方法。

对于创新性实验,还应注明其创新点。

5.实验过程:写明执行实验方案的实验过程。

6.实验结论:根据实验过程中得到的结果,做出结论。

7.实验小结:本次实验的体会和建议。

8.指导教师评语及成绩:指导教师依据学生的实际报告内容,给出本次实验报告的评价和成绩。

1 实验环境:VC++6.02 实验目的 :掌握单链表的基本操作在链式存储结构上的实现。

3实验原理:(1)#define MAXSIZE 5 //链表的最大长度typedef struct{ElemType data;int cur;}component,SLinkList[MAXSIZE];(2)动态分配的物理结构,每个结点值域指向其直接后继结点,指针为数据元素之间逻辑关系的映象。

4实验方案:根据链表的结构编写主函数,调用链表的构造空表算法,查找算法,插入算法以及删除算法,验证算法的正确性。

5实验过程:(1).编写算法以及主函数(2).编译运行出错,查找错误(3).改正错误,重新编译运行,没有错误(4).输入测试数据,验证结果,得出结论(5).保存结果,写入实验报告中6实验结论附录1:源程序。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
宁波工程学院电信学院计算机教研室
实验报告
课程名称:___ 数据结构 ___ __
实验项目: 链串的基本算法
指导教师:
实验位置: 电子楼二楼机房
姓 名:
学 号:
班 级: 计科102
日期:2011/10/13
一、实验目的
1)熟悉串的定义和串的基本操作。
2)掌握链串的基本运算。
3)加深对串数据结构的理解,逐步培养解决实际问题的编程能力。
for(k=1;k<=j;k++){
q=(listring *)malloc(sizeof(listring));
q->data=p->data;
r->next=q;
r=q;
p=p->next;
}
r->next=NULL;
return str;
}
//字符串插入
listring *insstr(listring *s,int i,listring *t){
printf("\n");
}
//判断字符串是否为空
void empstr(listring *s){
if(s->next==NULL)
printf("字符串是空的!");
else
printf("字符串不为空!");
}
void initstr(listring *&s){
s=(listring *)malloc(sizeof(listring));
}listring;
//字符串赋值
void strassign(listring *&s,char cstr[]){
int i;
listring *r,*p;
s=(listring *)malloc(sizeof(listring));
r=s;
for(i=0;cstr[i]!='\0';i++){
p=(listring *)malloc(sizeof(listring));
r->next=q;
r=q;
p1=p1->next;
}
while(p!=NULL){
q=(listring *)malloc(sizeof(listring));
q->data=p->data;
r->next=q;
r=q;
p=p->next;
}
r->next=NULL;
return str;
}
//字符串删除
return str;
for(k=0;k<i-1;k++){
q=(listring *)malloc(sizeof(listring));
q->data=p->data;
r->next=q;
r=q;
p=p->next;
}
for(k=0;k<j;k++)
p=p->next;
while(p1!=NULL){
(1)串赋值Assign(s,t)
将一个字符串常量赋给串s,即生成一个其值等于t的串s
(2)串复制StrCopy(s,t)
将串t赋给串s
(3)计算串长度StrLength(s)
返回串s中字符个数
(4)判断串相等StrEqual(s,t)
若两个串s与t相等则返回1;否则返回0。
(5)串连接Concat(s,t)
p->data=cstr[i];
r->next=p;
r=p;
}
r->next=NULL;
}
//字符串复制
void strcopy(listring *&s,listring *t){
listring *p=t->next,*q,*r;
s=(listring *)malloc(sizeof(listring));
int k;
listring *str,*p=s->next,*p1=t->next,*q,*r;
str=(listring *)malloc(sizeof(listring));
str->next=NULL;
r=str;
if(i<=0||i>strlength(s)||j<0||i+j-1>strlength(s))
strcopy(t1,t);
printf("输出t1的长度:%d\n",strlength(t1));
s2=insstr(s,9,s1);
printf("输出s2:\n");
dispstr(s2);
s3=delstr(s,2,5);
printf("输出s3:\n");
dispstr(s3);
s4=repstr(s,2,3,s1);
二、实验环境
装有Visual C++6.0的计算机。
三、实验内容
编写一个程序,实现链串的各种基本运算,并在此基础上设计一个主程序。具体如下:
编写栈的基本操作函数
链串类型定义如下所示:
typedef struct snode{
char data;
struct snode *next;
}listring;
q->data=p->data;
r->next=q;
r=q;
p=p->next;
}
r->next=NULL;
return str;
}
//字符串的子串
listring *substr(listring *s,int i,int j){
int k;
listring *str,*p=s->next,*q,*r;
str=(listring *)malloc(sizeof(listring));
str->next=NULL;
r=str;
if(i<=0||i>strlength(s)||j<0||i+j-1>strlength(s))
return str;
for(k=0;k<i-1;k++)
p=p->next;
printf("输出s4:\n");
dispstr(s4);
s5=suபைடு நூலகம்str(s,8,4);
printf("输出s5:\n");
dispstr(s5);
s6=concat(s1,t);
printf("输出s6:\n");
dispstr(s6);
l=strequal(s1,s5);
if(l==1)
printf("s1与s5相等!");
r->next=q;
r=q;
p=p->next;
}
r->next=NULL;
return str;
}
//字符串输出
void dispstr(listring *s){
listring *p=s->next;
while(p!=NULL){
printf("%c",p->data);
p=p->next;
}
int k;
listring *str,*p=s->next,*p1=t->next,*q,*r;
str=(listring *)malloc(sizeof(listring));
str->next=NULL;
r=str;
if(i<=0||i>strlength(s)+1)
return str;
for(k=1;k<i;k++){
编写主函数
调用上述函数实现下列操作:
(1)建立串s=“abcdefghijklmn”,串s1=“xyz”,串t=“hijk”
(2)复制串t到t1,并输出t1的长度
(3)在串s的第9个字符位置插入串s1而产生串s2,并输出s2
(4)删除s第2个字符开始的5个字符而产生串s3,并输出s3
(5)将串s第2个字符开始的3个字符替换成串s1而产生串s4,并输出s4
r=s;
while(p!=NULL){
q=(listring *)malloc(sizeof(listring));
q->data=p->data;
r->next=q;
r=q;
p=p->next;
}
r->next=NULL;
}
//字符串长度
int strlength(listring *s){
int i=0;
q=(listring *)malloc(sizeof(listring));
q->data=p->data;
r->next=q;
r=q;
p=p->next;
}
while(p1!=NULL){
q=(listring *)malloc(sizeof(listring));
q->data=p1->data;
s->next=NULL;
}
//主函数
int main(void){
listring *s,*s1,*t,*t1,*s2,*s3,*s4,*s5,*s6;
int l;
strassign(s,"abcdefghijklmn");
相关文档
最新文档