数据结构实验报告(四)

您所在的位置:网站首页 算法与数据结构串的实验报告总结与反思 数据结构实验报告(四)

数据结构实验报告(四)

2024-07-10 12:40| 来源: 网络整理| 查看: 265

栈和字符串 1.实验目的

1、掌握栈的结构及基本运算的实现方法

2、掌握用栈实现表达式计算的基本技术

3、掌握应用栈进行问题求解的基本方法

4、理解掌握串的有关概念和运算实现

5、掌握快速模式匹配等串的典型算法

2.实验内容

1、建立一个空的链式队列

2、判空

3、打印输出队列中所有元素

4、队列的系列操作

5、字符串的创建删除插入替换

6、快速匹配算法

3.设计思路

先建立一个空队列,进行判空、入队、出队、打印等操作

创建字符串、再实现字符串的系列操作,注意字符串的长度

4.实验代码 #include #include typedef struct kk{ int data; struct kk *next; }Node; typedef struct k1{ Node *head,*tail; }queue; /*函数功能:建立一个空的链式队列 */ /*函数参数:无 */ /*函数返回值:指向queue类型变量的指针*/ /*函数名:init() */ /*************************************/ queue *init() { queue *qu; qu=(queue *)malloc(sizeof(queue)); //分配空间 qu->head=NULL; //队首指针设置为空 qu->tail=NULL; //队尾指针设置为空 return qu; } /**************************************/ /*函数功能:判空 */ /*函数参数:queue类型的变量qu */ /*函数返回值:int类型 */ /*函数名:empty() */ /**************************************/ int empty(queue *qu) { return (qu->head ? 0 : 1); //为空返回1,不为空返回0 } /**************************************/ /*函数功能:入队 */ /*函数参数:指向queue类型变量的指针变量qu int类型的变量x */ /*函数返回值:指向queue类型变量的指针 */ /*函数名:push() */ /**************************************/ queue* push(queue *qu,int x) { //向链式队列中插入一个值为x的结点 Node *p; p=(Node *)malloc(sizeof(Node));//造结点 p->data=x; p->next=NULL;//初始化 if(qu->head==NULL) qu->head=qu->tail=p;//当前队列为空时,新插入的结点为队列中唯一一个结点 else { qu->tail->next=p; //当队列不为空时 qu->tail=p; } return qu; } /***************************************/ /*函数功能:出队 */ /*函数参数:指向queue类型变量的指针变量qu*/ /*函数返回值:指向queue类型变量的指针 */ /*函数名:pop() */ /***************************************/ queue *pop(queue *qu) { Node *q; if(!qu->head) {printf("队列为空,无法删除!");return qu;} q=qu->head; //*q指向队首结点 qu->head=q->next;//队首指针指向下一结点 free(q); return qu; } /****************************************/ /*函数功能:打印输出队列中所有元素 */ /*函数参数:指向queue类型的指针变量qu */ /*函数返回类型:无 */ /*函数名:Show() */ /****************************************/ void Show(queue *qu) { Node *p; printf("队列中的元素为:\n"); p=qu->head; if(!p) printf("\nThe link queue is empty"); for(p=qu->head;p!=NULL;p=p->next) { printf("%5d",p->data); } } int main() { queue *qu; int x,i; qu=init(); printf("入队5个元素:\n"); for(i=0;ilen=strlen(S->str); } /*********************************/ /*函数功能:顺序串的删除 */ /*函数参数:S为指向seqstring类型的指针变量*/ /* int型变量i为删除的起始位置 */ /* int型变量n为所删除的子串长度 */ /*函数返回值:空 */ /*函数名:delStr() */ /*********************************/ seqstring* delStr(seqstring *S,int i,int n) { int k; if(i+n>S->len)//特殊情况处理,如果要删除的长度大于表长,直接修改表长 { S->len=i; return S; } for(k=i+n;klen;k++,i++)//移动元素 { S->str[i]=S->str[k]; } S->len=S->len-n;//修改表长 return S; } /*********************************/ /*函数功能:顺序串的插入 */ /*函数参数:S为指向seqstring类型的指针变量*/ /* int型变量i为插入的起始位置 */ /* s2为要插入的子串 */ /*函数返回值:空 */ /*函数名:insertStr() */ /*********************************/ void insertStr(seqstring *S1,int i,seqstring *S2) { int h,k,j; h=S2->len; if(iS1->len+1) { printf("can not insert\n"); } else { for(k=S1->len-1;k>=i;k--)//移出空位 { S1->str[k+h]=S1->str[k]; } for(k=i,j=0;klen&&jlen;k++,j++)//实施插入 { S1->str[k]=S2->str[j]; S1->len++; //改表长 } } } /*********************************/ /*函数功能:字符串的替换 */ /*函数参数:S1为指向seqstring类型的指针变量*/ /* int型变量i为插入的起始位置 */ /* s2为要替换的子串 */ /* int型变量n为要替换子串的长度 /*函数返回值:空 */ /*函数名:replaceStr() */ /*********************************/ void replaceStr(seqstring *S1, int i, int n, seqstring *S2) //字符串替换 { seqstring *p; delStr(S1, i, n); //删除 insertStr(S1, i, S2);//插入 } /*********************************/ /*函数功能:打印 */ /*函数参数:S为指向seqstring类型的指针变量*/ /*函数返回值:空 */ /*函数名:show() */ /*********************************/ void show(seqstring *S) //打印字符串 { int i; i=0; printf("字符串内容为:\n"); while (ilen) { printf("%c", S->str[i]); i++; } printf("\n"); } /*********************************/ int main() { seqstring S1;seqstring S2; creatStr(&S1); show(&S1); seqstring *p; p=delStr(&S1,1,5); show(p); creatStr(&S2); show(&S2); insertStr(&S1,2,&S2); show(&S1); replaceStr(&S1,1,4,&S2); show(&S1); return 0; } #include #include int success(char *t,char *p,int i) { int j; for(j=0;j


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3