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 stru
2、ct nodeb node_b,*list_b; /*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
3、tree *tree_ptr,tree_node; typedef struct forest *forest_ptr,forest_node; typedef struct alphabet *alphabet_ptr,alphabet_node; tree_ptr tree1; forest_ptr forest1; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 17 页 - - - - - - - - - alphabet_ptr alphabet1; int l
4、asttree,lastnode; int least,second; /*哈夫曼算法种相关的3 种结构的声明-end*/ /*stack difination start*/ struct stacknode char *bian_ma; struct stacknode *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_nod
5、e); 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(Memory allocation error!); return; top-bian_ma=item; top-next=NULL; void pop(void) link p; p=top; top=top-next; free(p); 名师资料总结 - - -精品资料欢迎下载 - - - -
6、- - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 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) /*显示栈重的内容*/ link ptr; ptr=s; while(ptr!=NULL) printf(%s,ptr-
7、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!=NULL) printf(%d,%cn,i,ptr-data);
8、 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; h
9、ead-next-next=NULL; else while(ptr!=NULL) if(ptr-data=item) 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_
10、b, temp_b; ptr_b=head_b; if(ptr_b-next=NULL) head_b-next=(list_b)malloc(sizeof(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
11、=(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=fopen(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(
12、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;i+) printf(%f,%dn,forest1i.weight,forest1i.root); getch(); printf(nnALPHABET_STRUCT_ARRY :nnn); for(i=0;i=n;i+) p
13、rintf(%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-next; forest1=(forest_ptr)malloc(sizeof(forest_node)*n+sizeof(forest_node); alphabet1=(alphabet_ptr)m
14、alloc(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.symbol=0; while(ptr!=NULL) forest1i.weight=alphabet1i.probability=ptr-count/count; forest1i.roo
15、t=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.txt,r+)=NULL) printf(Creat error!n); printf(Input the data:n); ch=getch();
16、 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 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=
17、1;nnext; if(fp=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
18、(node); head-next=NULL; head-data=0; head-count=0; head_b=(list_b)malloc(sizeof(node_b); head_b-data=0; head_b-next=NULL; do system(cls); creat(); search(); printf(nlianbiao1:n); display(head);/* 显示链表1*/ getch(); printf(nlianbiao2:n); display_b(head_b); getch(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - -
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年数据结构算法源代码借鉴 2022 数据结构 算法 源代码 借鉴
限制150内