数据结构头文件Ver1.0
2010年10月03日 20:43 | Comments(27) | Category:C语言 | Tags:c 数据结构 线性表 链表 静态表 广义表
/* 数据结构 全部结构定义文件 defs.h * author : star */ //引入所有需要的头文件 #include <stdio.h> #include <stdlib.h> //防止重复定义 #ifndef DEF_H #define DEF_H //定义执行状态返回结果 #define TRUE 1 //成功 #define FALSE 0 //失败 #ifndef FORMATSTR #define FORMATSTR "%d " //输出格式 typedef int ElemType; //基本数据类型 #endif //线性表 typedef struct { ElemType *data; //数据 int size; //容量 int len; //长度 }SQLIST; //单链表 typedef struct link_node { ElemType data; //数据 struct link_node *next; //结点 }NODE, *NODEPTR, *LINKLIST; //双向链表 typedef struct dlink_node { ElemType data; //数据 struct dlink_node *next, *prior; //前后结点 }DBNODE, *DBNODEPTR, *DBLINKLIST; //循环单向链表 原理同单链表 //循环双向链表 原理同双向链表 //静态链表 #define SLEN 512 //静态链表长度 typedef struct slink_node { ElemType data; //数据 int next; //指针 }SNODE, *SLINKLIST; /*静态链表是给没有指针的语言写的,C语言有指针,* *而且静态链表不实用,定义多而杂,因此不写了 */ //广义表 enum{ATOM,LIST}; typedef struct glist_node { int tag; //ATOM或LIST union { ElemType data; //ATOM struct glist_node *head; //LIST }item; struct glist_node *next; //结点 }GLNODE, *GLIST; #endif
迷你小游戏
2010年8月21日 03:46 | Comments(3) | Category:C语言 | Tags:c 搜索
#include <stdio.h> #define MAXLEN 10 //最大8*8阵 #defint MAXSTEP 100 //最多100步 int DesMar[MAXLEN][MAXLEN];//目标矩阵 int SrcMar[MAXLEN][MAXLEN];//原矩阵 int N, NeedTimes;//矩阵大小和需要次数 struct pos {int x, y;}res[MAXSTEP];//解 void TurnMar(int x, int y)//转一下 { int i, j; for(i = x-1; i <= x+1; ++i) for(j = y-1; j <= y+1; ++j) SrcMar[i][j] ^= 1; } int Checked()//检查是否为解 { int i, j; for(i = 1; i <= N; ++i) for(j = 1; j <= N; ++j) if(SrcMar[i][j] != DesMar[i][j]) return 0; return 1; } int DFS(int n)//搜索 { int i, j; if(n >= NeedTimes) if(Checked()) return 1; else return 0; for(i = 1; i <= N; ++i) for(j = 1; j <= N; ++j) { TurnMar(i, j); res[n].x = i, res[n].y = j; if(!DFS(n+1)) TurnMar(i, j); else return 1; } return 0; } int main(void) { int i, j; while(scanf("%d", &N),N)//输入0退出程序 { puts("input the source info:"); for(i = 1; i <= N; ++i)//输入原矩阵信息 for(j = 1; j <= N; ++j) scanf("%d", &SrcMar[i][j]); puts("input the destination info:"); for(i = 1; i <= N; ++i)//输入目标矩阵信息 for(j = 1; j <= N; ++j) scanf("%d", &DesMar[i][j]); puts("input the times:");//输入次数 scanf("%d", &NeedTimes); DFS(0); for(i = 0; i < NeedTimes; ++i) printf("%d %d\n", res[i].x, res[i].y); } return 0; }
达夫的设备
2010年8月12日 23:14 | Comments(7) | Category:C++ | Tags:c
void duff_memcpy(char* to, char* from, size_t count) { size_t n = (count+7) / 8; switch(count % 8) { case 0: do{ *to++ = *from++; case 7: *to++ = *from++; case 6: *to++ = *from++; case 5: *to++ = *from++; case 4: *to++ = *from++; case 3: *to++ = *from++; case 2: *to++ = *from++; case 1: *to++ = *from++; }while(--n>0); } }
曼德勃罗特集
2010年8月12日 02:44 | Comments(1604) | Category:C语言 | Tags:数学 分形 高维度
#include <stdio.h> int main(void) { double realCoord, imagCoord; double realTemp, imagTemp, realTemp2, arg; int iterations; for(imagCoord = 1.2; imagCoord >= -1.2; imagCoord -= 0.05) { for(realCoord = -0.6; realCoord <= 1.77; realCoord += 0.03) { iterations = 0; realTemp = realCoord; imagTemp = imagCoord; arg = realCoord*realCoord + imagCoord*imagCoord; for(; arg<4 && iterations<40; ++iterations) { realTemp2 = realTemp*realTemp - imagTemp*imagTemp - realCoord; imagTemp = 2*realTemp*imagTemp - imagCoord; realTemp = realTemp2; arg = realTemp*realTemp + imagTemp*imagTemp; } switch (iterations % 4) { case 0: putchar('.'); break; case 1: putchar('o'); break; case 2: putchar('O'); break; case 3: putchar('@'); break; } } putchar(10); } return 0; }
N皇后问题
2010年8月10日 00:22 | Comments(22) | Category:C语言 | Tags:c 二进制 位运算 数学
#include <stdio.h> static int upperlim, sum; void binqueen(int row, int ld, int rd) { int pos, p; if(row != upperlim) { pos = upperlim & ~(row | ld | rd); while (pos) { p = pos & -pos; pos -= p; binqueen(row+p, (ld+p)<<1, (rd+p)>>1); } } else sum++; } int main(void) { int n; scanf("%d", &n); upperlim = (1<<n) - 1; binqueen(0, 0, 0); printf("%d", sum); return 0; }