数据结构试验四 栈与字符串
来源:互联网 发布:android数据库查看表 编辑:程序博客网 时间:2024/06/05 17:40
头文件1
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<algorithm>using namespace std;#define MAXSIZE 100typedef int datatype;typedef struct{ datatype a[MAXSIZE]; int top;}seqstack;/**********************************//*函数名称:init() *//*函数功能:初始化空栈 *//**********************************/void init(seqstack *st){ st->top=0;}/**********************************//*函数名称:empty() *//*函数功能:判断栈是否为空 *//**********************************/int empty(seqstack *st){ return st->top?0:1;}/**********************************//*函数名称:read() *//*函数功能:读栈顶元 *//**********************************/datatype read(seqstack *st){ if(empty(st)){ printf("\n栈的空的!\n"); exit(1); } else return st->a[st->top--];}/**********************************//*函数名称:push() *//*函数功能:进栈 *//**********************************/void push(seqstack *st,datatype x){ if(st->top==MAXSIZE){ printf("栈满,无法进栈!\n"); exit(1); } st->a[st->top++]=x;}/**********************************//*函数名称:pop() *//*函数功能:出栈 *//**********************************/datatype pop(seqstack *st){ if(st->top==0){ printf("\n顺序栈是空的!\n"); exit(1); } return st->a[--st->top];}
/*利用栈,实现十进制整数m到十六进制数的转换功能*//**********************************//*文件名称:lab4_01.cpp *//**********************************/#include"seqstack.h"void Dto16(int m){ seqstack s;/*定义顺序栈*/ init(&s); char ch[20]={'0','1','2','3','4','5','6', '7','8','9','A','B','C','D','E','F'}; printf("十进制数%u对应的十六进制数是:",m); if(m==0) s.a[s.top++]=ch[0]; while(m) { s.a[s.top++]=ch[m%16]; m/=16; } while(!empty(&s)) putchar(s.a[--s.top]); printf("\n");}int main(){ int m; printf("请输入待转换的十进制数:\n"); while(scanf("%u",&m)!=EOF) Dto16(m); return 0;}
头文件2
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<algorithm>using namespace std;typedef int datatype;typedef struct node{ datatype data; struct node *next;}linknode;typedef linknode *linkstack;/**********************************//*函数名称:init() *//*函数功能:初始化空栈 *//**********************************/linkstack init(){ return NULL;}/**********************************//*函数名称:empty() *//*函数功能:判断栈是否为空 *//**********************************/int empty(linkstack top){ return top?0:1;}/**********************************//*函数名称:read() *//*函数功能:读栈顶元 *//**********************************/datatype read(linkstack top){ if(empty(top)){ printf("\n栈的空的!\n"); exit(1); } else return top->data;}/**********************************//*函数名称:push() *//*函数功能:进栈 *//**********************************/linkstack push(linkstack top,datatype x){ linkstack p; p=(linkstack)malloc(sizeof(linknode)); p->data=x; p->next=top; top=p; return top;}/**********************************//*函数名称:pop() *//*函数功能:出栈 *//**********************************/linkstack pop(linkstack top){ linkstack p; if(empty(top)){ printf("\n顺序栈是空的!\n"); exit(1); } p=top; top=top->next; free(p); return top;}
/*链式栈结构,实现十进制无符号整数m到十六进制数的转换功能*//**********************************//*文件名称:lab4_02.cpp *//**********************************/#include"linkstack.h"void Dto16(int m){ linkstack s; s=init(); char ch[20]={'0','1','2','3','4','5','6', '7','8','9','A','B','C','D','E','F'}; printf("十进制数%u对应的十六进制数是:",m); if(!m) s=push(s,ch[0]); while(m) { s=push(s,ch[m%16]); m/=16; } while(!empty(s)) { putchar(read(s)); s=pop(s); } puts("");}int main(){ unsigned int m; printf("请输入待转换的十进制数:\n"); while(scanf("%u",&m)!=EOF) Dto16(m); return 0;}
头文件4
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<algorithm>using namespace std;typedef char datatype;typedef struct node{ datatype data; struct node *next;}linknode;typedef linknode *linkstring;/**********************************//*函数功能:尾插法建立字符单链表 *//**********************************/linkstring creat(){ linkstring head,r,s; datatype x; head=r=(linkstring)malloc(sizeof(linknode)); head->next=NULL; printf("请输入一个字符串(以回车结束):\n"); scanf("%c",&x); while(x!='\n') { s=(linkstring)malloc(sizeof(linknode)); s->data=x; r->next=s; r=s; scanf("%c",&x); } r->next=NULL; return head;}/**********************************//*函数功能:输出字符串 *//**********************************/void print(linkstring head){ linkstring p; p=head->next; printf("List is:\n"); while(p) { printf("%c",p->data); p=p->next; } printf("\n");}/*释放单链表的内容*/void delList(linkstring head){ linkstring p=head; while(p) { head=p->next; free(p); p=head; }}
/*链式存储结构linksrting.h文件在字符串s中从第i个位置起取长度为len的子串,函数返回子串链表*/#include"linkstring.h"linkstring substring(linkstring s,int i,int len){ int cnt=0; s=s->next; while(cnt<i){ s=s->next; cnt++; } cnt=0; linkstring temp,t1,t2; temp=t1=(linkstring)malloc(sizeof(linknode)); temp->next=NULL; while(cnt<len&&s) { t2=(linkstring)malloc(sizeof(linknode)); t2->data=s->data; s=s->next; t1->next=t2; t1=t2; cnt++; } t1->next=NULL; return temp;}int main(){ linkstring str1,str2; str1=creat(); /*建字符串链表*/ print(str1); str2=substring(str1,3,5); /*从第3个位置取长度为5的子串*/ print(str2); /*输出子串*/ delList(str1); delList(str2); return 0;}
这里需要注意
/*采用带头结点的链表存储在字符串s中删除从第i个位置开始,长度为len的子串*//**********************************//*文件名称:lab4_05.cpp *//**********************************/#include"linkstring.h"void delstring(linkstring s,int i,int len){ int cnt=0; linkstring t1=s; while(cnt<i){ s=s->next; cnt++; } cnt=0; //注意下面三行 linkstring t2=s; s=s->next; linkstring temp=s; while(cnt<len) { s=temp->next; free(temp); temp=s; cnt++; } t2->next=s; s=t1;}int main(){ linkstring str; str=creat(); /*建字符串链表*/ print(str); delstring(str,2,3); /*从第2个位置删除长度为3的子串*/ print(str); delList(str); return 0;}
0 0
- 数据结构试验四 栈与字符串
- 数据结构试验四
- 数据结构试验四 --图论
- 数据结构试验-试验7二叉树的建立与遍历
- 数据结构(四)栈与队列
- 数据结构试验
- 试验四
- 数据结构试验-栈的实现及其应用
- 数据结构与算法四
- (实验四)(字符串实验部分)《数据结构》第四章字符串与多维数组
- 数据结构实验之栈四:括号匹配 字符串匹配
- 数据结构实验4-栈与字符串
- 数据结构与算法--字符串
- 数据结构与算法:字符串
- 数据结构与算法:字符串
- 数据结构试验:二叉排序树
- 数据结构试验-Sqlist
- 数据结构试验-Linklist
- H - H HDU 1559
- 我的大学(写给正在读大学而又感到迷茫的你)
- UVA - 11889 Benefit【LCM】
- 多文件组织之打豆豆
- R语言实战-思维导图
- 数据结构试验四 栈与字符串
- 左链接Column 'id' in field list is ambiguous
- Java源码解读——ArrayList(二)
- # java 导入项目
- caffe源码 之 Relu层
- 枪械与美女
- 外冷内热的HR SaaS市场,真能上演一场商业好戏?
- Qt关于按键长按的问题
- 证明不定积分收敛