《C语言算法大全.doc》由会员分享,可在线阅读,更多相关《C语言算法大全.doc(255页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-作者xxxx-日期xxxxC语言算法大全【精品文档】C语言经典算法目录一、单元加662. erre263. 数组完全单元74. 栈单元加8二、底层编程91. asm92. C标志符命名源程序213. ping234. winsock2275. 检测鼠标296. 检出错误307. 时间陷阱31三、汉诺塔331. 非递归332. 汉诺塔343. 汉诺塔2354. 换位递归365. 诺汉塔画图版376. 四塔1387. 四塔240四、逆阵411. 简单逆阵412. 逆矩阵423. 逆阵45五、经典程序471. 编程汉字问题472. 编随机数483. 递堆法494. 汉字字模505. 简单数据库54
2、6. 冒泡法改进557. 穷举搜索法578. 扫描码589. 傻瓜递归5910. 神经元模型5911. 试题6312. 挽救软盘6413. 小白鼠钻迷宫6514. 小字库DIY6815. 小字库DIY-69六、求进制711. 16进制10进制712. 二进制数723. 二进制数272七、数据结构73一、单链表73732. 单链表743. 单链表1764.单链表2775. 单链表倒序786. 单链表的处理全集797. 建立链表1888. 节点899. 链表(递归)9310. 链表十五人排序9611. 冒泡排序9812. 质因子99二、排列类数据结构1011大整数1012. 递归车厢1033. 队
3、列1054. 二叉排序树1075. 二叉树实例1106. 各种排序法1157. 哈夫曼算法1248. 哈慢树1339. 建树和遍历13510. 迷宫13711. 迷宫问题13912. 逆波兰计算器14213. 排序法14414. 数据结构115215. 数据结构215315. 数据结构315416. 双链表正排序15517. 推箱子15718. 无向图15819. 线索化二叉树16120. 线性顺序存储结构16321. 栈操作166八、数学问题169一、凉东问题1691692. re1693.数组递归退出1704. 数组递归退出2171二、苹果纠纷1721722.苹果分法172三、数学算法17
4、31.符号图形1732.绘制圆1763.余弦曲线1764. 余弦直线177四、桃子猴问题1781.乘方函数桃子猴1782.递归桃猴1783.猴子和桃1794.桃子猴180五、小明买书1801.小明买书1802.小明买书C+181六、圆周率1831.狐狸圆周率1832.圆周率183七、运算类数学问题1841. 阿姆斯特朗数1842.百鸡百钱1843.大加数1854.大小倍约1885.大整数1886.灯塔问题1907.递推1928.叠代整除1939.多位阶乘19410.多位阶乘219611.黑白19712.简单计算器19713.阶乘递归19914.逻辑移动19915.平方根20016十五人排序20
5、117.四分砝码20218.完数20319.小孩分糖果204九、数组2051.矩阵转换2052.螺旋数组12063.螺旋数组22074.数字移动2085.数组操作2106. 桶排序2107.杨辉三角形212十、问题算法212一、骑士遍历2121.骑士遍历12122. 骑士遍历22153. 骑士遍历回逆223二、万年历2241万年历2242. 万年历的算法229三、其它问题算法2341. N皇后问题回溯算法2342. 动态计算网络最长最短路线2363. 货郎担分枝限界图形演示2394. 货郎担限界算法2485. 矩阵乘法动态规划256十一、小写数字转为大写数字2591小写数字转换成大写数字125
6、92小写数字转换成大写数字22613.小写数字转换成大写数字3265十二、效验算法266266十三、硬币情况268循环的2682.硬币分法268十四、字符2691.单词倒转2692.出字符2703.回文2704.字符编辑2715.字符编辑技术(插入和删除)2726.字符串查找272十五、数据算法2741.单链表2742.单循环链表2783.定长串2824.二叉树2865.二分查找12886.二分查找22907.链串2928.链队列2959.链栈29810.顺序队列29911.顺序栈30212.图305七、数据结构一、单链表/*我不知道我这样做合适不合适,好象自己在帮助别人干坏事我不可能给你说得
7、很细,学习到的东西是自己的,难道对自己也可以作弊吗?好好努力吧*/#include#include #includestruct f /数据结构double data;struct f *next;main() int n;scanf(%d,&n);fun(n); fun(n)double y=0.00,x=1.00; /这里用双精度实数定义可以容纳更大的数据struct f *head,*cthis,*a;int number,i,j=0;doa=(struct f*)malloc(sizeof(struct f);if(head=NULL)head=a;elsecthis=head;cth
8、is=cthis-next;cthis=a;cthis-data=j; /这里定义存处在各个链表里的数据 /你可以用(int)rand()随机数来代替jnumber=cthis-data;for(i=0;ij;i+)x=x*n;y+=number*x; j+;while(jn);printf(%.0lf,y);2. 单链表#include#includestruct roommate char name20; long num; int age; char birthplace20; struct roommate *next;struct roommate *head,*cthis,*cne
9、w;void new_record(void) char ch; char numstr20;do cnew=(struct roommate*)malloc(sizeof(struct roommate); if(head=NULL) head=cnew; else cthis=head; while(cthis-next!=NULL) cthis=cthis-next; cthis-next=cnew; cthis=cnew;printf(nenter name:);gets(cthis-name);printf(nenter number:);gets(numstr);cthis-num
10、=atol(numstr);printf(nenter age:);gets(numstr);cthis-age=atoi(numstr);printf(nenter birthplace:);gets(cthis-birthplace);cthis-next=NULL;printf(nprint e to add record:);ch=getchar();getchar();while(ch=e);cthis-next=head;void listall(void)int i=0; cthis=head; do printf(nrecord number %dn,i); printf(na
11、me:%sn,cthis-name); printf(num:%ldn,cthis-num); printf(age:%dn,cthis-age); printf(birthplace:%sn,cthis-birthplace); cthis=cthis-next; while(cthis!=head);void main()char ch;int flag=1;head=NULL;while(flag)printf(ntype e to enter new record,);printf(type l to list all records,);printf(type i to insert
12、 a record:); ch=getchar();getchar(); switch(ch)casee:new_record();break;casel:listall();break; default:flag=0;3. 单链表1#include#includestruct roommatechar name;long num;int age;char birthplace;struct roommate *next;struct roommate *head,*cthis,*cnew;void ins_record(void)int i,j=0;char numstr,b;cthis=h
13、ead;printf(nInput a num :);scanf(%d,&i);while(jnext; +j; if(ji-1) return; cnew=(struct roommate*)malloc(sizeof (struct roommate); printf(nplease input the information:); printf(nenter name:); scanf(%s, &cnew-name); printf(nenter number:); scanf(%ld,&cnew-num); printf(nenter age:); scanf(%d,&cnew-age
14、); printf(nenter birthplace:); scanf(%s,&cnew-birthplace); cnew-next=cthis;main()ins_record();#include #include struct node int key; struct node *next; ; void creat_link(struct node *); main() struct node *head=NULL; creat_link(head);/*这里可以这么调用吗?*/ void creat_link(struct node *head_node) struct node
15、 *p,*q,*Temp; int number; printf(Please input data:-1 is Endn); scanf(%d,&number); while(number!=-1) q=(struct node *)malloc(sizeof(struct node); q-key=number; if(head_node=NULL ) head_node=q; p=q; else p-next=q; p=q; scanf(%d,&number); p-next=NULL; Temp=head_node; while(Temp!=NULL) printf(%dn,Temp-
16、key); Temp=Temp-next; 5. 单链表倒序#includestruct fsbint data;int flag; struct fsb * next;main()struct fsb *p,*head,*sta,*end;int i,cishu,j;end=(struct fsb *)malloc(sizeof(struct fsb);end-data=0;end-flag=0;end-next=NULL;head=p=end;for (i=2;idata=i-1; end-flag=0; end-next=NULL; p-next=end; p=end;p-next=NU
17、LL;printf(n倒序前:);p=head;for(i=1;idata);p=p-next;/*/p=NULL;while(head-next != NULL) sta=head; head=head-next; sta-next=p; p=sta; head-next=sta;printf(n倒序后:);p=head;for(i=1;idata);p=p-next;/*/6. 单链表的处理全集/*谁有兴趣一起来丰富这个程序的的功能?*/#include#include#define MAX 20#define ELEMTP int#define v (*p)struct nodeELEM
18、TP data;struct node *next;struct node *p,*q,*s,*head;int j=0,i,k;main()int x,y,cord;void outlin(struct node *h);void create();void insert(struct node *h,int x,int y);void deletes(struct node *h,int x);struct node *MaxCompare(struct node *h);struct node *MinCompare(struct node *h);int delIterance(str
19、uct node *h);void batchInsert(struct node *h,int x);void batchDelete(struct node *h,int x,int y);void Cz(struct node* h);void Xg(struct node * h);printf(建立链表,输入-999完成链表: n);create();i=j;outlin(head);doprintf(n 主菜单 n);printf( 1 插入一个元素 n);printf( 2 删除一个元素 n);printf( 3 升序排序 n);printf( 4 降序排序 n);printf(
20、 5 查找元素 n);printf( 6 修改元素 n);printf( 7 删除重复元素 n);printf( 8 批量加入元素 n);printf( 9 批量删除元素 n);printf( 0 结束程序运行 n);printf(-n);printf( 请输入您的选择(1, 2, 3, 4, 5, 6, 7, 8, 9, 0) );scanf(%d,&cord);switch(cord)case 1:printf(请输入插入的位置 i: );scanf(%d,&x);printf(请输入插入的数据 y: );scanf(%d,&y);insert(head,x,y);i=j;outlin(h
21、ead);break;case 2:printf(x=?);scanf(%d,&x);deletes(head,x);i=j;outlin(head);break;case 3:printf(链表由大到小是);s=MaxCompare(head);j=i;outlin(s);/outlin(head);break;case 4:printf(链表由大到小是);s=MinCompare(head);j=i;outlin(s);break;case 5:Cz(head);outlin(head);break;case 6:Xg(head);outlin(head);break;case 7:k=d
22、elIterance(head);i=i-k;j=i;outlin(head);break;case 8:printf(请输入插入的位置 i: );scanf(%d,&x);batchInsert(head,x);i=j;outlin(head);break;case 9:printf(请输入删除的起始位置 i: );scanf(%d,&x);printf(请输入删除的结束位置 y: );scanf(%d,&y);batchDelete(head,x,y);i=j;outlin(head);break;case 0:exit(0);break;while(cord=0);void outlin
23、(struct node *h)p=h-next;while(p!=NULL)printf( data=%4d ,p-data);p=p-next;printf(n输出结束nn);void deletes(struct node *h,int x)/删除节点p=h;while(p-next!=NULL&p-next-data!=x)p=p-next;if(p-next=NULL)printf(x 不存在 !);elseq=p-next;p-next=q-next;free(q);-j;void insert(struct node *h,int x,int y)s=(struct node*)
24、malloc(sizeof(struct node);s-data=y;q=h;p=h-next;while(p!=NULL&p-data!=x)q=p;p=p-next;q-next=s;s-next=p;+j;void create()/建立链表int x;head=(struct node*)malloc(sizeof(struct node);head-next=NULL;p=head;printf(x=?);scanf(%d,&x);while(x!=-999)s=(struct node*)malloc(sizeof(struct node);s-data=x;s-next=NUL
25、L;p-next=s;p=s;printf(x=?);+j;scanf(%d,&x);/以下函数由七绝玩家编写/struct node *MaxCompare(struct node *h)/由大到小排序 struct node *t;int x;t=h;s=NULL;while(j!=0)x=t-next-data;q=t-next;while(q!=NULL)if(q-datadata;elsex=x;q=q-next;p=t;while(p-next!=NULL&p-next-data!=x)p=p-next;q=p-next;p-next=q-next;t=p;t=h;p=q;p-ne
26、xt=s;s=p;j-;t-next=s;head=t;return (t);struct node *MinCompare(struct node *h)/由小到大排序struct node *t;int x;t=h;s=NULL;while(j!=0)x=t-next-data;q=t-next;while(q!=NULL)if(q-data=x)x=q-data;elsex=x;q=q-next;p=t;while(p-next!=NULL&p-next-data!=x)p=p-next;q=p-next;p-next=q-next;t=p;t=h;p=q;p-next=s;s=p;j-
27、;t-next=s;head=t;return (t);int delIterance(struct node *h)/删除重复元素int x,y=0;-j;s=h-next;while(j0)x=s-data;p=s;while(p-next!=NULL)if(p-next=NULL)x=x;else if(p-next-data=x)q=p-next;p-next=q-next;free(q);-j;+y;elsep=p-next;s=s-next;-j;return y;void batchInsert(struct node *h,int x)/批量加入int y=0;q=h;p=h-
28、next;while(p!=NULL&p-data!=x)q=p;p=p-next;printf(y=?);scanf(%d,&y);while(y!=-999)s=(struct node*)malloc(sizeof(struct node);s-data=y;q-next=s;s-next=p;q=s;printf(y=?);scanf(%d,&y);+j;void batchDelete(struct node *h,int x,int y)/批量删除int k=0,w=0;struct node *t;p=h;q=h;while(p-next!=NULL&p-next-data!=x
29、)+k;p=p-next;while(q-next!=NULL&q-next-data!=y)+w;q=q-next;if(p-next=NULL|q-next=NULL)printf(输入的位置不正确,请重新开始!);else if(knext;while(p-next!=s)t=p-next;p-next=t-next;free(t);-j;else if(w=k)printf(没有删除元素);elses=p-next;while(q-next!=s)t=q-next;q-next=t-next;free(t);-j;/七绝玩家编写结束/以下函数由lihk编写/void Cz(struct
30、 node* h) /查找/ struct node * num;int i; num=head ; printf(输入您要查找的号码:); scanf(%d,&i); while(i!=num-data & num-next!=NULL) num=num-next; if (i=num-data) printf(号码:%d,num-data); else printf(该号码不在链表里.); void Xg(struct node * h) /修改/ struct node * num; int i; num=head; printf(查找您要修改的号码:); scanf(%d,&i); w
31、hile(i!=num-data&num-next!=NULL) num=num-next; if (i=num-data) printf(:%dn,num-data); printf(输入您要修改的新信息:); printf(号码:); scanf(%d,&num-data); printf(n修改成功!); else printf(该号码不在链表里!); /lihk编写结束/7. 建立链表1/* 链表建立程序 */#includestdio.h#include#define NULL 0#define LEN sizeof(struct student)struct studentlong
32、 num;int score;struct student *next;int n; /*全局变量n*/struct student *creat()struct student *head; struct student *p1,*p2; n=0; p1=p2=(struct student *)malloc(LEN); scanf(%ld%d,&p1-num,&p1-score);/*%d和%d之间不应该有逗号*/ head=NULL; while (p1-num!=0) n=n+1; if(n=1) head=p1; else p2-next=p1; p2=p1; p1=(struct
33、student*)malloc(LEN); scanf(%ld%d,&p1-num,&p1-score); p2-next=NULL; return(head); void print(head)struct student *head;struct student *p; p=head; /*在这里付值才可以*/ printf(Now,These %d records are:n,n); if(head!=NULL) do printf(%ld%5dn,p-num,p-score); p= p-next; while(p!=NULL);void main()struct student *h
34、ead;printf(input records:n);head= creat();print(head);8. 节点#include #define TYPE struct stu#define LEN sizeof(struct stu)struct stu int num; int age; struct stu *next;TYPE * creatlink(int n);TYPE * deletelink(TYPE * head,int num);TYPE * insertlink(TYPE * head,TYPE * pi);void printlink(TYPE * head);void destroylink( TYPE * head );void main(void) TYPE *head=NULL,*pnum=NULL; int n=3,num; /* 创建一个含 n 个节点的链表 */ printf(input number of node:); head=creatlink(n); printlink(head); /* 删除链表中值为 num 的节点