star

搜索

RSS

RSS Link

计数器

141409

数据结构头文件Ver1.0

2010年10月03日 20:43 | Comments(27) | Category:C语言 | Tags:

/* 数据结构 全部结构定义文件 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:

#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:

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:

#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;
}