/**************************************
整数对应 32 bit 二进制数串中数字1的个数
2016-10-24
liukun
***************************************/
#include <stdio.h>
// #include <math.h> // 整数对应 32 bit 二进制数串中数字1的个数
int binary1counter(int n)
{
// if(n<0) return -1;
int i;
// int binaLength = ceil(log2(n));
int counter1=0;
for(i=0;i<32;++i) //for(i=0;i<binaLength;++i)
{
if(n & 1!=0)counter1++;
n = n>>1;
}
printf("%d\n",counter1);
return 1;
} int main()
{
binary1counter(-21);
return 0;
}

  

void linkListSort(LinkList &L)
// 将单链表L的节点重排,使其递增有序 2016-12-16
{
LNode *p=L->next, *pre;
LNode *r=p->next;
p->next=NULL;
p=r; //保存p->next,防止断链
while(p!=NULL){
r=p->next;
pre=L;
while(pre->next!=NULL && pre->next->data<p->data) //在有序表中查找插入 *p 的前驱节点 *pre,将*p插入到 *pre 之后
pre=pre->next;
p->next=pre->next;
pre->next=p;
p=r; //扫描剩下的节点
}
}

  

/******************************
C 简单的格式化读取文本操作
笨蛋,
居然遇到了一个奇怪的后缀自增问题
2016-11-29
*******************************/
#include<stdio.h>
typedef struct people
{
char name[10];
int age;
}people; void readFile()
{
FILE *fp;
char ch;
if((fp=fopen("E:\\data.dat","r"))==NULL) {
printf("file cannot be opened/n");
}
people p[2];
int i=0;
while (!feof(fp))
{
fscanf(fp,"%s %d",&p[i].name, &p[i].age);
printf("%s %d\n",p[i].name, p[i].age);
i++;
}
fclose(fp);
}

  

/******************
二叉树相关算法
2016-11-26
//真是想跑去看会儿电影
********************/
#include<stdio.h>
#define MAXSIZE 500 typedef stuct BiTreeNode
{
int data;
BiTreeNode * lchild;
BiTreeNode * rchild;
}* BiTree; //非递归方法求解二叉树高度
int BtDepth(BiTree T)
{
if(!T)
return 0;
int front=-1,rear=-1;
int last=0,level=0;
BiTree Q[MAXSIZE];
Q[++rear]=T;
BiTree p;
while(front>rear)
{
p=Q[++front];
if(p->lchild)
Q[++rear]=p->lchild;
if(p->rchild)
Q[++rear]=p->rchild;
if(front==last)
{
level++;
last=rear; //last 指向下一层
}
return level;
}
} int Btdepth2(BiTree t)
{
if(!T)
return 0;
int ldep=Btdepth2(T->lchild);
int rdep=Btdepth2(T->rchild);
return ldep>rdep?ldep+1:rdep+1;
} bool IsComplete(BiTree T)
// 判断给定二叉树是否为完全二叉树
{
InitQueue(Q);
if(!T)
return 1;
EnQueue(Q,T);
while(!IsEmpty(Q))
{
DeQueue(Q,p);
if(p) //非空节点子孙入队(子孙可能为空指针)
{
EnQueue(Q,p->lchild);
EnQueue(Q,p->rchild);
}
else //节点为空,检查之后有没有非空节点,有的话就不是完全二叉树了
while(!IsEmpty(Q))
{
DeQueue(Q,p);
if(p)
return 0;
}
}
}

  

/*
栈的应用
括号匹配
2016-11-24
//真是智障
*/
#include<stdio.h>
#define MAXSIZE 500 /* 字符栈 */
char cStack[MAXSIZE];
int top=-1; bool BracketsChecks(char *str)
{
int i=0,top=-1;
while(str[i]!='\0')
{
switch(str[i]){
case '('://cStack[++top]='(';break;
case '['://cStack[++top]=str[i];break;
case '{':cStack[++top]=str[i];break;
case ')':if(cStack[top--]!='(') return false;break;
case '}':if(cStack[top--]!='{') return false;break;
case ']':if(cStack[top--]!='[') return false;break;
default: break;
}
i++;
}
if(top==-1)
return true;
return false;
} int main()
{
char str[]= "1+2*(5*6)+{5/7+[55+55]}";
if(BracketsChecks(str))
{
printf("OK\n");
}
return 0;
}

  

/***********************
2016-11-18
[矩阵]调整为阶梯矩阵
liu kun
> 指针动态传递二维数组
*************************/
#include<stdio.h>
#include<math.h>
#define EPSINON 1e-5 /* 主要数据结构 */
typedef float dataType;
struct rowinfo
{
int index;
int leftZeroCount;
};
dataType matrix[4][5]={0,0,1,2,1,1,2,3,4,5,0,0,1,2,1,0,1,2,3,4}; /* 浮点数判0 */
bool equalZero(dataType d)
{
return fabs(d)<EPSINON;
} /* 指针实现动态传递 */
void adaptMatrix(dataType ** matrix,dataType ** toMatrix, int m, int n)
/* m rows n columns*/
{
int i,j;
rowinfo rowlen[m];
for(i=0;i<m;i++)
{
rowlen[i].index=i;
for(j=0;j<n&&equalZero(*((dataType *)matrix+n*i+j));j++);
rowlen[i].leftZeroCount=j;
}
//sort the rowinfo array
for(i=1;i<m;i++)
{
rowinfo temp = rowlen[i];
for(j=i-1;rowlen[j].leftZeroCount>temp.leftZeroCount && j>=0; rowlen[j+1]=rowlen[j--]);
rowlen[j+1] = temp;
}
// copy to newMatrix
for(i=0;i<m;i++)
{
for(j=0;j<n;++j) *((dataType *)toMatrix+n*i+j)= *((dataType *)matrix+ n*rowlen[i].index +j);
}
} // Test main function
int main()
{ dataType toMatrix[4][5];
int columNum = sizeof(matrix[0])/sizeof(matrix[0][0]);
adaptMatrix((dataType **)matrix, (dataType **)toMatrix,4,columNum);
int i,j;
for(i=0;i<4;i++)
{
for(j=0;j<columNum;j++)
printf("%.2f ",toMatrix[i][j]);
printf("\n");
}
return 0;
}

  

/****************************************
打印杨辉三角
date: 2016-10-15
writer: liu kun
reference: 数据结构 殷人昆
*****************************************/
#include <iostream>
#include<iomanip>
#include "queue.h"
using namespace std; //控制数字间隔
char blank[3+1] = " ";
void YANGVI(int n)
{
Queue q;
EnQueue(q,1);EnQueue(q,1);
int i,j;QElemType s=0,t;
for(i=1;i<=n;i++)
{
cout<<endl;
// 每行起始位置排版
for(int bl_count=0;bl_count<n-i;bl_count++)
cout<<blank;
EnQueue(q,0);
for(j=1;j<=i+2;j++) //第 i 行的 i+2 个系数,包括一个 0
{
DeQueue(q,t);
EnQueue(q,s+t); //计算下一行系数并入队
s=t;
if(j!=i+2)cout<<setw(sizeof(blank)-1)<<s<<blank;
}
}
};
int main()
{
YANGVI(10);
return 0;
}
   > queue.h #ifndef QUEUE_H_INCLUDED
#define QUEUE_H_INCLUDED
#define MAXSIZE 500
typedef int QElemType; typedef struct Queue{
int maxSize=MAXSIZE;
QElemType *data=new QElemType[maxSize];
int front=0;
int rear=front;
}Queue; void InitQueue(Queue &q); int EnQueue(Queue &q, QElemType x)
{
//check full
if((q.rear+1)%q.maxSize==q.front)
{
return 0;
}
else{
q.data[q.rear]=x;
q.rear = (q.rear+1)%q.maxSize;
return 1;
}
} int DeQueue(Queue &q,QElemType& x)
{
// check empty, ERROR code 1
if(q.rear==q.front) return 0;
else{
x = q.data[q.front];
q.front=(q.front+1)%q.maxSize;
return 1;
}
} int QueueEmpty(Queue &q)
{
if(q.rear==q.front)return 1;
else return 0;
} // 引用作为地址传值
int QueueFull(Queue &q)
{
return (q.rear+1)%q.maxSize==q.front;
} int QueueSize(Queue& q)
{
return (q.rear+q.maxSize-q.front)%q.maxSize;
}
#endif // QUEUE_H_INCLUDED
  

  

简单排序算法实现

simpleSort.h

#ifndef SIMPLESORT_H_INCLUDED
#define SIMPLESORT_H_INCLUDED
typedef int EleType; int RbinarySearch(EleType A[], const EleType x, int low, int high)
{
if(low>high) return -1;
int mid = (low+high)/2;
if(A[mid]==x)
return mid;
else
if(A[mid]>x)
{
high = mid -1;
return(binarySearch(A,x,low,high));
}
else
{
low = mid + 1;
return(binarySearch(A,x,low,high));
}
} int binarySearch(EleType A[], const EleType x, int low, int high)
{
while(low<=high){
int mid = (low+high)/2;
if(A[mid]==x)
return mid;
else if(A[mid]>x) high = mid -1;
else low = mid + 1;
}
return -1;
} int insertSort(EleType A[], int n)
/* 数组下标从0开始,n为元素个数 */
{
if(n<1) return 0;
register int i,j;
for(i=1;i<n;i++)
{
EleType tem=A[i];
     for(j=i-1;j>=0 && A[j]>tem; A[j+1]=A[j--]);
A[j+1]=tem;
}
return 1;
} int selectSort(EleType A[], int n)
{
if(n<1) return 0;
int i,j;
for(i=0;i<n;i++)
{
int minInd=i;
for(j=i+1;j<n;j++)
{
if(A[j]<A[minInd])minInd = j;
}
EleType tem=A[i];
A[i]=A[minInd];
A[minInd]=tem;
}
return 1;
} int partion(EleType A[], int low, int high)
{
const EleType pivot = A[low];
while(low<high)
{
while(low<high&&A[high]>=pivot) high--;
A[low]=A[high];
while(low<high&&A[low]<pivot) low++;
A[high] = A[low];
}
A[high]=pivot;
return high;
} int quickSort(EleType A[], int n, int low, int high)
{
if(n<1) return 0;
if(low>high) return 1;
int p = partion(A,low,high);
quickSort(A,n, low, p-1);
quickSort(A,n, p+1, high);
return 1;
} #endif // SIMPLESORT_H_INCLUDED

  

或者使用标准库里提供的排序函数,到这儿就算是使用说明书上的知识了。

#include<stdio.h>
#include<stdlib.h> int A[] = {5,4,6,8,8,7,9,1,3,2,0};
int cmp ( const void *a , const void *b )
{
return *(int *)a - *(int *)b;
} int main()
{
int i;
int testNum = sizeof(A)/sizeof(int);
qsort(A,testNum ,sizeof(A[0]),cmp);
for(i=0;i<testNum;i++)
printf("%d ",A[i]);
return 0;
}

  

/*
2016-11-17
判断字符串是否中心对称
*/
#include<stdio.h>
#include<string.h>
#define MAXSIZE 500 char str[] = "ehhhe";
bool isSymmetry(char * str)
{
char stack[MAXSIZE]="";
int top=-1;
int leftPart = strlen(str)/2;
int rightBegin = (1+strlen(str))/2;
int i;
for(i=0;i<leftPart;++i)
{
stack[++top]=str[i];
}
int strL = strlen(str);
for(i=rightBegin;i<strL;++i)
{
if( !str[i]==stack[top--] ) return false;
/*
if(str[i]==stack[top])
top--;
else
return false;
*/
}
return true;
} int main()
{
if(isSymmetry(str))
printf("%s", "Format OK!\n");
return 0;
}

  

/*
2016-11-17
判断字符串是否中心对称
P64 04
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXSIZE 500 typedef struct charNode{
char data;
charNode * next;
}charNode; char str[] = "abcba"; void initCharNode(charNode *head, char * str)
{
int i;
charNode * p=head;
for(i=0;i<strlen(str);i++)
{
charNode * cnode = (charNode *)malloc(sizeof(charNode));
cnode->data=str[i];
cnode->next=NULL;
p->next = cnode;
p=cnode;
}
} bool isSymmetry(charNode *hd, const int n)
{
char stack[MAXSIZE]="";
int top=-1;
int leftPart = n/2;
int rightBegin = (n+1)/2;
int i;
charNode * p=hd;
for(i=0;i<leftPart;++i)
{
p=p->next;
stack[++top]=p->data;
}
if(n%2!=0) p=p->next;
for(i=rightBegin;i<n;++i)
{
p=p->next;
if( p->data !=stack[top--]) return false;
}
return true;
} int main()
{
charNode * hdnode = (charNode *)malloc(sizeof(charNode));
initCharNode(hdnode, str);
if(isSymmetry(hdnode,strlen(str)))
printf("%s", "Format OK!\n");
return 0;
}

  

C /C++ 语言练习册的更多相关文章

  1. 用 Python 读写 Excel 表格

    Python 可以读写 Excel 表格吗? 当然可以. Python 下有很多类库可以做到, openpyxl 就是其中的佼佼者. openpyxl 的设计非常漂亮 ,你一定会喜欢它!不信请往下看: ...

  2. 用 Python 生成 HTML 表格

    在 邮件报表 之类的开发任务中,需要生成 HTML 表格. 使用 Python 生成 HTML 表格基本没啥难度, for 循环遍历一遍数据并输出标签即可. 如果需要实现合并单元格,或者按需调整表格样 ...

  3. [Asp.net 5] Localization-Asp.net运行时多语言

    本节介绍的是Microsoft.AspNet.Localization工程.该工程是运行在Asp.net 5环境中的运行时多语言设置. ASP.net 5中间件技术 在新的Asp.net 5中,可以将 ...

  4. 《Linux多线程服务端编程:使用muduo C++网络库》上市半年重印两次,总印数达到了9000册

    <Linux多线程服务端编程:使用muduo C++网络库>这本书自今年一月上市以来,半年之内已经重印两次(加上首印,一共是三次印刷),总印数达到了9000册,这在技术书里已经算是相当不错 ...

  5. C/C++学习----使用C语言代替cmd命令、cmd命令大全

    [开发环境] 物理机版本:Win 7 旗舰版(64位) IDE版本:Visual Studio 2013简体中文旗舰版(cn_visual_studio_ultimate_2013_with_upda ...

  6. c语言基础学习02_windows系统下的cmd命令

    =============================================================================注意:cmd的命令很多,需要用的时候可以查询即 ...

  7. Unicode字符集,各个语言的区间

    链接:http://www.cnblogs.com/zl0372/p/unicode.html 链接:http://www.unicode.org/ 链接:https://zh.wikipedia.o ...

  8. Java 拓展之调用其他语言

    目前而言,编程语言真的是太多了.每一种都是一种智慧的结晶,但是每个都存在其缺点.网上经常能看到一些程序员争论"XX是世界上最好的语言"之类的话题.其实我们大可不必这样.语言本身只是 ...

  9. R语言 一套内容 从入门 到放弃

    [怪毛匠子整理] 1.下载 wget http://mirror.bjtu.edu.cn/cran/src/base/R-3/R-3.0.1.tar.gz 2.解压: tar -zxvf R-3.0. ...

随机推荐

  1. 2.EF中 Code-First 方式的数据库迁移

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/code-first-migrations-with-entity-framework/ 系列目 ...

  2. C# 系统托盘图标

    C# 系统托盘图标 WPF NotifyIcon 资料 网址: http://www.codeproject.com/Articles/36468/WPF-NotifyIcon http://www. ...

  3. screen命令

    基本用法 screen -S testname 在这里面执行命令,即使终端突出,进程也不会断掉 screen -list查看有哪些screen screen -r testname 恢复

  4. 阿里云添加路由的Windows批处理文件

    一段很好的学习bat程序的示例代码,如下: @echo off route print -4 "10.0.0.0" | find "10.0.0.0" > ...

  5. JHipster框架的简要搭建与说明

    JHipster的亮点 风头超劲,席卷欧美,最新全能Java Web开发程式产生器 (java web generator). 由Java专家累积的开发经验,配上各类实用的框架技术,去繁取精的运用,全 ...

  6. dubbo连接zookeeper注册中心因为断网导致线程无限等待问题【转】

    最近维护的系统切换了网络环境,由联通换成了电信网络,因为某些过滤规则导致系统连不上zookeeper服务器(应用系统机器在深圳,网络为电信线路,zookeeper服务器在北京,网络为联通线路),因为我 ...

  7. 五个典型的 JavaScript 面试题

    阅读原文 在IT界,需要大量的 JavaScript 开发者.如果你的能力能够胜任这一角色,那么你将获得许多更换工作和提高薪水的机会.但是在你被公司录取之前,你需要展现你的技术实力,以便通过面试环节. ...

  8. 看看C# 6.0中那些语法糖都干了些什么(上篇)

    今天没事,就下了个vs2015 preview,前段时间园子里面也在热炒这些新的语法糖,这里我们就来看看到底都会生成些什么样的IL? 一:自动初始化属性 确实这个比之前的版本简化了一下,不过你肯定很好 ...

  9. 原创 C++应用程序在Windows下的编译、链接(四)动态链接

    4动态链接 4.1概述 在静态链接阶段,链接器为PE文件生成了导入表,导出表,符号表,并调整了Call指令后面的操作数,在程序调用的时候,能够直接地或者间接地定位到IAT中的某个位置,在PE文件中,该 ...

  10. AngularJS 系列 02 - 模块

    引导目录: AngularJS 系列 学习笔记 目录篇 前言: 其实,在上篇文章介绍数据绑定的时候,我们的HelloWorld的代码案例中就已经使用了模块(module).哈哈. 本篇就着重介绍一下a ...