数据结构字符统计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一:字符分类频率统计
一、实验名称:
字符分类频率统计
二、实验目的:
将给定的字符串按数字字符,字母字符,其它字符三类进行链式分类存储并且打印出来。
三、实验内容及要求:
将给定的字符串按数字字符,字母字符,其它字符三类进行分类存储,统计各类字符出现的总个数。
四:概要设计:
void Mylist::Insert(char x)
{
Node *p,*q;
p=first;
while (p->next&&p->next->c p=p->next; if(p->next&&p->next->c==x) p->next->count++; else { q=new Node; q->c=x; q->count=1; q->next=p->next; p->next=q; } first->count++; } 五:详细程序 #include using namespace std; #define Maxsize 255 struct Node { char c; int count; Node *next; }; class Mylist { private: Node *first; public: Mylist(); void Insert(char x); void PrintList(); }; Mylist::Mylist() { first=new Node; first->next=NULL; first->count=0; } void Mylist::PrintList() { Node *p; p=first->next; while (p) { cout<< p->c<<":["< p=p->next; } cout< void Mylist::Insert(char x) { Node *p,*q; p=first; while (p->next&&p->next->c p=p->next; if(p->next&&p->next->c==x) p->next->count++; else { q=new Node; q->c=x; q->count=1; q->next=p->next; p->next=q; } first->count++; } int kind(char a) { if(a<='9'&&a>='0') return 0; else if(a>'a'&&a<='z'||a>'A'&&a<='Z') return 1; else return 2; } void main() { cout<<"请输入要判断的字符串! "; char s[Maxsize]; gets(s); Mylist L[3]; for(int i=0;i { char ch=s[i]; int k=kind(ch); L[k].Insert(ch); } for(i=0;i<3;i++) L[i].PrintList(); } 六:实验调试 七:实验心得 实验过程中的主要困难在于如何构建链表,可以考虑定义一个指针数组,形成三个分别存储字母,数字,其他字符的链表,这里采用的是老师ppt里面的定义一个类对象的数组,其实主要部分都差不多,将字符串里面的每个字符进行分类统计,链表里面,没有则创建一个结点来存储,如果有则将count++; 刚开始只是一个劲儿在想啊想的,结果呆呆做了半天只把人纠结了,写的代码就一乱码,所以动手前还是应该现在草稿子上写出基本的方法,入口,就如老师课件上的,把基本流程写下来。 朱柳—计科1011—2010117156