C语言算法大全(329页).doc

上传人:1595****071 文档编号:35272622 上传时间:2022-08-21 格式:DOC 页数:328 大小:728KB
返回 下载 相关 举报
C语言算法大全(329页).doc_第1页
第1页 / 共328页
C语言算法大全(329页).doc_第2页
第2页 / 共328页
点击查看更多>>
资源描述

《C语言算法大全(329页).doc》由会员分享,可在线阅读,更多相关《C语言算法大全(329页).doc(328页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、-C语言算法大全-第 326 页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. 简单数据库546. 冒泡法改进557

2、. 穷举搜索法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. 队列1054. 二叉排序

3、树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三、数学算法1731.符号图形1732

4、.绘制圆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十五人排序20117.四分砝码202

5、18.完数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小写数字转换成大写数字12592小写数字转换成大写

6、数字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;cthis=cthis-nex

8、t;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,*cnew;void new_r

9、ecord(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=atol(numstr)

10、;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(name:%sn,cthis-

11、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 a record:);

12、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=head;printf(nI

13、nput 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); printf(nen

14、ter 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 *p,*q,*Temp; i

15、nt 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-key); Temp=Temp

16、-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=NULL;printf(n倒序前:)

17、;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 nodeELEMTP data;struct node *ne

18、xt;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(struct node *h);void batch

19、Insert(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( 5 查找元素 n);printf( 6 修改

20、元素 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(head);break;case 2:print

21、f(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=delIterance(head);i=i-k;

22、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(struct node *h)p=h-nex

23、t;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*)malloc(sizeof(struct no

24、de);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=NULL;p-next=s;p=s;printf(x

25、=?);+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-next=s;s=p;j-;t-next=s;hea

26、d=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-;t-next=s;head=t;return

27、(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-next;while(p!=NULL&p-dat

28、a!=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)+k;p=p-next;while(q-nex

29、t!=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 node* h) /查找/ struct no

30、de * 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); while(i!=num-data&num-nex

31、t!=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 num;int score;struct stu

32、dent *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 student*)malloc(LEN); sca

33、nf(%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 *head;printf(input records:n

34、);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 * he

35、ad );void main(void) TYPE *head=NULL,*pnum=NULL; int n=3,num; /* 创建一个含 n 个节点的链表 */ printf(input number of node:); head=creatlink(n); printlink(head); /* 删除链表中值为 num 的节点 */ printf(Input the deleted number:); scanf(%d,&num); head=deletelink(head,num); printlink(head); /* 在链表中插入一个节点 */ printf(Insert a

36、recordn); pnum=(TYPE *)malloc(LEN); if(pnum=NULL) printf(Pointer is NULL-memory alloc fail!); printf(Input the inserted number:); scanf(%d,&pnum-num); printf(Input the inserted age:); scanf(%d,&pnum-age); head=insertlink(head,pnum); printlink( head ); /* 销毁链表, 释放动态分配的内存 */ destroylink( head );/* 创建一个含 n 个节点的链表 */TYPE * creatlink(int n) TYPE *head=NULL, *pf, *pb; int i; for(i=0;inum);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 单元课程

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁