社区
C语言
帖子详情
哪里有较复杂,较大的源代码例子?
borlandsoftware
2002-01-08 02:25:26
...全文
209
5
打赏
收藏
哪里有较复杂,较大的源代码例子?
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
andy_lau
2002-01-09
打赏
举报
回复
题目要求:1)建立一正文文件(本程序中建立的文件名文test.txt),向其中输入字符(本程序中可输入任意ASCII值)
2)通过哈夫曼算法求出文件中字符的相应编码
3)建立一与正文文件(test.txt)对应的编码文件(本程序中为bainma.txt)
//////////////////////////////////////////////////////////////////////////////////
#include<stdio.h>
#include<alloc.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
/*声明两种链表结构----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; /*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 *forest_ptr,forest_node;
typedef struct alphabet *alphabet_ptr,alphabet_node;
tree_ptr tree1;
forest_ptr forest1;
alphabet_ptr alphabet1;
int lasttree,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_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("Memory allocation error!");
return;
}
top->bian_ma=item;
top->next=NULL;
}
}
void pop(void){
link p;
p=top;
top=top->next;
free(p);
}
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->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,%d\n",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,%c\n",i,ptr->data);
i++;
ptr=ptr->next;
}
}
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==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_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){
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=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(ch); /*插入元素进链表1*/
insert_b(ch); /*插入元素进链表2*/
}
printf("\n");
fclose(fp);
}
void display_struct(int n){ /*显示哈夫曼算法中的3个结构树组 */
int i=0;
printf("\n\n=======================================\n\n");
printf("FOREST_STRUCT_ARRY :\n\n\n");
for(i=0;i<=n;i++){
printf("%f,%d\n",forest1[i].weight,forest1[i].root);
}
getch();
printf("\n\nALPHABET_STRUCT_ARRY :\n\n\n");
for(i=0;i<=n;i++){
printf("%f,%d,%c\n",alphabet1[i].probability,alphabet1[i].leaf,alphabet1[i].symbol);
}
getch();
printf("\n\nTREE_STRUCT_ARRY :\n\n\n");
for(i=0;i<=2*n-1;i++)
printf("%d,%d,%d\n",tree1[i].lchild,tree1[i].rchild,tree1[i].parent);
printf("\n\n======================================\n\n");
getch();
}
int init_struct(void){ /*初始化哈夫曼算法中3种结构数组*/
list ptr;
float count=.0;
int i=1,n=0;
ptr=head->next;
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)malloc(sizeof(alphabet_node)*n+sizeof(alphabet_node));
tree1=(tree_ptr)malloc(sizeof(tree_node)*n*2-sizeof(tree_node));
forest1[0].weight=alphabet1[0].probability=0.0;
forest1[0].root=alphabet1[0].leaf=0;
alphabet1[0].symbol='0';
while(ptr!=NULL){
forest1[i].weight=alphabet1[i].probability=ptr->count/count;
forest1[i].root=alphabet1[i].leaf=i;
alphabet1[i].symbol=ptr->data;
i++;
ptr=ptr->next;
}
for(i=0;i<=2*n-1;i++){
tree1[i].lchild=0;
tree1[i].rchild=0;
tree1[i].parent=0;
}
return n;
}
void creat(void){ /*创建正文文件test.txt*/
FILE *fp,*out;
char ch;
if((fp=fopen("test.txt","w+t"))==NULL)
printf("Creat error!\n");
printf("Input the data:\n");
ch=getch();
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;n<=number;n++){
j=i=n;
makenull();
p=tree1[i].parent;
while(tree1[p].parent!=0){
if(tree1[p].lchild==i)
push("0");
else
push("1");
i=p;
p=tree1[p].parent;
}
if(tree1[p].lchild==i)
push("0");
else
push("1");
strcpy(bm," "); /*目的:使创建编码文件中的各编码中间存在间隔*/
while(!empty()){
strcat(bm,tops());
pop();
}
alphabet1[j].bianma=malloc(sizeof(char)*number);
strcpy(alphabet1[j].bianma,bm);
printf("\n%c:%s",alphabet1[j].symbol,alphabet1[j].bianma); /*打印出相应的编码*/
getch();
}
}
void write_new_file(int number){ /*根据相应的编码重新建立编码文件*/
FILE *fp;
list_b ptr;
int i;
char *ch=malloc(sizeof(char)*number);
ptr=head_b->next;
if((fp=fopen("bianma.txt","w"))==NULL)
printf("Write in a new file error!");
else{
while(ptr!=NULL){
for(i=1;i<=number;i++){
if(ptr->data==alphabet1[i].symbol){
strcpy(ch,alphabet1[i].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->data='';
head->count=0;
head_b=(list_b)malloc(sizeof(node_b));
head_b->data='';
head_b->next=NULL;
do{
system("cls");
creat();
search();
printf("\nlianbiao1:\n");
display(head);/*显示链表1*/
getch();
printf("\nlianbiao2:\n");
display_b(head_b);
getch();
num=init_struct();
printf("\n");
printf("The 3 init_struct of huffman?\n");
display_struct(num);/*显示初始化的哈夫曼书的相关3个结构数组*/
lastnode=num;
lasttree=num;
huffman();
printf("Now the 3 struct through huffman shuanfa\n");
display_struct(num);/*显示哈夫曼树中相关的3种结构(经过哈夫曼算法处理)*/
printf("\nThe bian_ma is:\n");
creat_bianma(num);
write_new_file(num);
printf("\nDo you want to re_try(y/n)?");
ch=getchar();
}while(ch=='y');
}
/*哈夫曼算法-----defination_start*/
void lightones(void){
int i;
if(forest1[1].weight<=forest1[2].weight){
least=1;
second=2;
}
else{
least=2;
second=1;
}
for(i=3;i<=lasttree;i++)
if(forest1[i].weight<forest1[least].weight){
second=least;
least=i;
}
else
if(forest1[i].weight<forest1[second].weight)
second=i;
}
int creat_tree(int lefttree,int righttree){
lastnode=lastnode+1;
tree1[lastnode].lchild=forest1[lefttree].root;
tree1[lastnode].rchild=forest1[righttree].root;
tree1[lastnode].parent=0;
tree1[forest1[lefttree].root].parent=lastnode;
tree1[forest1[righttree].root].parent=lastnode;
return(lastnode);
}
void huffman(void){
int i,j;
int newroot;
while(lasttree>1){
lightones();
i=least;
j=second;
newroot=creat_tree(i,j);
forest1[i].weight=forest1[i].weight+forest1[j].weight;
forest1[i].root=newroot;
forest1[j]=forest1[lasttree];
lasttree=lasttree-1;
}
}
/*哈夫曼算法-----defination end*/
编译环境:windows_2000P TURBOC_2.0
scklotz
2002-01-08
打赏
举报
回复
骗地都是,自己去找。
如bo2, quake2, apache, php, mysql, 这些出名的软件渡有source code.
gigix
2002-01-08
打赏
举报
回复
www.boost.org
STL
seacalf
2002-01-08
打赏
举报
回复
www.simtel.com
panjet
2002-01-08
打赏
举报
回复
linux源代码,较复杂也较大.
力扣-830
较大
分组的位置
题目描述 在一个由小写字母构成的字符串 s 中,包含由一些连续的相同字符所构成的分组。 例如,在字符串 s = “abbxxxxzyy” 中,就含有 “a”, “bb”, “xxxx”, “z” 和 “yy” 这样的一些分组。 分组可以用区间 [start, end] 表示,其中 start 和 end 分别表示该分组的起始和终止位置的下标。上例中的 “xxxx” 分组用区间表示为 [3,6] 。 我们称所有包含大于或等于三个连续字符的分组为
较大
分组 。 找到每一个
较大
分组 的区间,按起始位置下标递增顺
有哪些 Java
源代码
看了后让你收获很多,代码思维和能力有
较大
的提升?
转知乎问答 作者:王爵nice 来源:知乎 既然没人,我自荐一发我写的mvc框架biezhi/blade 对于学习J2EE的框架有很大的帮助,代码里使用了各种设计模式、事件机制、Java8语法、代码量也很小,web服务使用Netty作为支持,对HTTP/网络想研究的一定是你的必读品。目前在写 Blade-In-Action 小书。 我之前也写过如何实现IOC/MVC框架的简单博文,可以在这个biezhi/java-bible仓库里看到。 也说一下我看过的一些比较不错的代码,看了对Java能力一定
创新加密方式,实现
源代码
加密 助力
源代码
安全
无论您是软件研发企业、高新技术制造企业,还是其他涉及
源代码
开发与保护的行业,SDC 沙盒都能为您量身定制最适合的安全解决方案,为您的
源代码
安全保驾护航,助力企业在激烈的市场竞争中稳健前行,开启
源代码
安全保护的全新篇章。一旦发现异常行为,如频繁的文件拷贝操作、未经授权的网络连接尝试等,系统将立即发出警报,并采取相应的隔离和处理措施,及时阻止潜在的泄密风险。从加密机制的执行,到数据流向的控制,再到安全审计的实施,用户在各个平台上都能感受到相同级别的安全保障,无需担心因操作系统的差异而导致安全漏洞的出现。
Masonry
源代码
解析
masonry
源代码
解析
规模
较大
的C++项目代码层次结构
1.前言C++项目中如果代码层次结构不好,非常容易变得难以维护。对于规模
较大
的项目而言,必须将整个项目划分成若干模块进行开发。2.模块模块包括可执行文件,动态库和静态库。2.1应用层 最上层为应用层,表现为可执行文件。本层代码应主要进行界面控制,尽量不要涉及
复杂
逻辑。2.2动态库层动态库层作为逻辑模块的主体。采用动态库的好处是将
复杂
应用拆分成可以独立分发的子模块
C语言
70,040
社区成员
243,237
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章