2022年数据结构算法源代码 .pdf
《2022年数据结构算法源代码 .pdf》由会员分享,可在线阅读,更多相关《2022年数据结构算法源代码 .pdf(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、#include#include#include#include#include/*声明两种链表结构-start*/struct node_a/*链表 1-作用:用来统计文件中字符的个数和种类(通过count)*/char data;int count;struct node_a*next;typedef struct node_a node,*list;list head=NULL;struct nodeb/*链表 2-作用:用来建立用相应的编码代替字符的新文件*/char data;struct nodeb*next;typedef struct nodeb node_b,*list_b;
2、/*jiang bianma xieru wenjian*/list_b head_b=NULL;/*声明两种链表结构-end*/*哈夫曼算法种相关的3 种结构的声明-start*/struct forest float weight;int root;struct alphabet char symbol;float probability;int leaf;char*bianma;struct tree int lchild;int rchild;int parent;typedef struct tree*tree_ptr,tree_node;typedef struct forest*
3、forest_ptr,forest_node;typedef struct alphabet*alphabet_ptr,alphabet_node;tree_ptr tree1;forest_ptr forest1;名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 17 页 -alphabet_ptr alphabet1;int lasttree,lastnode;int least,second;/*哈夫曼算法种相关的3 种结构的声明-end*/*stack difination start*/struct stacknode char*bian_ma;struct stackn
4、ode*next;typedef struct stacknode stack_node;typedef stack_node*link;link top=NULL;void push(char*item)link p;if(top!=NULL)p=(link)malloc(sizeof(stack_node);if(p=NULL)printf(Memory allocation error!);return;p-bian_ma=item;p-next=top;top=p;else top=(link)malloc(sizeof(stack_node);if(!top)printf(Memor
5、y allocation error!);return;top-bian_ma=item;top-next=NULL;void pop(void)link p;p=top;top=top-next;free(p);名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 17 页 -void makenull(void)while(top!=NULL)pop();int empty()if(top=NULL)return 1;else return 0;char*tops(void)return(top-bian_ma);void display_stack(link s)/*显示栈重的内
6、容*/link ptr;ptr=s;while(ptr!=NULL)printf(%s,ptr-bian_ma);ptr=ptr-next;/*stack_difination is end*/void display(list h)/*显示链表1*/list ptr;int i=1;ptr=h-next;while(ptr!=NULL)printf(%d,%c,%dn,i,ptr-data,ptr-count);i+;ptr=ptr-next;void display_b(list_b h)/*显示链表2*/list_b ptr;int i=1;ptr=h-next;while(ptr!=N
7、ULL)printf(%d,%cn,i,ptr-data);i+;ptr=ptr-next;名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 17 页 -void insert(char item)/*用于插入元素以建立链表1*/list temp,ptr;int flag;ptr=head-next;if(ptr=NULL)head-next=(list)malloc(sizeof(node);head-next-data=item;head-next-count=1;head-next-next=NULL;else while(ptr!=NULL)if(ptr-data=ite
8、m)ptr-count=ptr-count+1;flag=1;ptr=ptr-next;ptr=head;if(flag=1)return;else temp=ptr-next;ptr-next=(list)malloc(sizeof(node);ptr-next-data=item;ptr-next-count=1;ptr-next-next=temp;void insert_b(char item)/*插入元素以建立链表2*/list_b ptr_b,temp_b;ptr_b=head_b;if(ptr_b-next=NULL)head_b-next=(list_b)malloc(size
9、of(node_b);head_b-next-data=item;head_b-next-next=NULL;else while(ptr_b-next!=NULL)名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 17 页 -ptr_b=ptr_b-next;ptr_b-next=(list_b)malloc(sizeof(node_b);ptr_b-next-data=item;ptr_b-next-next=NULL;void search(void)/*搜索文件并将文件中的数据分别存入作用不同的链表中*/FILE*fp;list ptr;char ch;if(fp=fope
10、n(test.txt,r)=NULL)printf(Reading error!n);while(!feof(fp)ch=getc(fp);if(ferror(fp)printf(error!n);break;if(ch=EOF)break;insert(ch);/*插入元素进链表1*/insert_b(ch);/*插入元素进链表2*/printf(n);fclose(fp);void display_struct(int n)/*显示哈夫曼算法中的3 个结构树组*/int i=0;printf(nn=nn);printf(FOREST_STRUCT_ARRY:nnn);for(i=0;i=n
11、;i+)printf(%f,%dn,forest1i.weight,forest1i.root);getch();printf(nnALPHABET_STRUCT_ARRY:nnn);for(i=0;i=n;i+)printf(%f,%d,%cn,alphabet1i.probability,alphabet1i.leaf,alphabet1i.symbol);getch();printf(nnTREE_STRUCT_ARRY:nnn);for(i=0;inext;while(ptr!=NULL)count=ptr-count+count;n+;ptr=ptr-next;ptr=head-ne
12、xt;forest1=(forest_ptr)malloc(sizeof(forest_node)*n+sizeof(forest_node);alphabet1=(alphabet_ptr)malloc(sizeof(alphabet_node)*n+sizeof(alphabet_node);tree1=(tree_ptr)malloc(sizeof(tree_node)*n*2-sizeof(tree_node);forest10.weight=alphabet10.probability=0.0;forest10.root=alphabet10.leaf=0;alphabet10.sy
13、mbol=0;while(ptr!=NULL)forest1i.weight=alphabet1i.probability=ptr-count/count;forest1i.root=alphabet1i.leaf=i;alphabet1i.symbol=ptr-data;i+;ptr=ptr-next;for(i=0;i=2*n-1;i+)tree1i.lchild=0;tree1i.rchild=0;tree1i.parent=0;return n;void creat(void)/*创建正文文件test.txt*/FILE*fp,*out;char ch;if(fp=fopen(test
14、.txt,r+)=NULL)printf(Creat error!n);printf(Input the data:n);ch=getch();名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 17 页 -putch(ch);while(ch!=#)putc(ch,fp);ch=getch();putch(ch);fclose(fp);void creat_bianma(int number)/*根据哈夫曼算法建立文件中各种字符对应的编码*/int i,j,n;int p;char*bm=malloc(sizeof(char)*number);for(n=1;nnext;if(fp
15、=fopen(bianma.txt,w)=NULL)printf(Write in a new file error!);else while(ptr!=NULL)for(i=1;idata=alphabet1i.symbol)strcpy(ch,alphabet1i.bianma);fputs(ch,fp);ptr=ptr-next;fclose(fp);void main(void)int i,num;char ch;void huffman(void);void lightones();head=(list)malloc(sizeof(node);head-next=NULL;head-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年数据结构算法源代码 2022 数据结构 算法 源代码
限制150内