再去一些大公司面试时,总喜欢去先考一些基础的算法,不多说了,直接上代码几个比较基础的算法代码:
//冒泡排序(相邻交换,除了最后一个)
voidmaopaoSort(){
intnum[6];
printf("请输入6个数:");
for(inti =0; i<6; i++) {scanf("%d",&num[i]);}
for(inti =0; i <6; i++) {
for(intj = i; j <5; j++) {if(num[i] > num[j]) {inttemp = num[i];num[i] = num[j];num[j] = temp;
}}}
printf("排序后为:");
for(inti=0; i <6; i++) {printf(" %d",num[i]);}
}
//选择排序(每一次找出最大或者最小的元素,比较除了当前的自己)
voidselectSort(){
intnum[6];printf("请输入6个数:");
for(inti =0; i<6; i++) {scanf("%d",&num[i]);}
for(inti =0; i <5; i++){for(intj =i+1; j <6; j++){if(num[i] < num[j]){
inttemp = num[i];num[i] = num[j];num[j] = temp;}}}
printf("排序后为:");
for(inti=0; i <6; i++) {printf(" %d",num[i]);}
}
//判断是否是回文
voidhuiwen(){
intn =1111221111;intp = n;intk =0;
while(p!=0) {k=k*10+p%10;p=p/10;//出去已经处理的余数(也就是最后一个数)
}if(k==n) {printf("%d是回文",n);}else{printf("%d不是回文",n);}}
//反转链表(链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域)
//定义链表
structnode{intval;structnode*pNext;};
//生成链表
structnode*gen(){structnode*pHead =NULL;
for(inti =10; i >0; i--){structnode* p = (structnode*)malloc(sizeof(structnode));p ->val= i;p ->pNext= pHead;pHead = p;}returnpHead;}
//打印链表
voiddisplay(structnode*pHead){while( pHead !=NULL){printf("%d ", pHead->val);pHead = pHead->pNext;}printf("\n");}
#pragma下面是实现反转列表的几种方式
//1、递归实现
structnode* reverse(structnode*pHead){if(pHead ==NULL|| pHead ->pNext==NULL){returnpHead;}
structnode*p = pHead ->pNext;structnode*pNewHead =reverse(p);p ->pNext= pHead;
pHead ->pNext=NULL;returnpNewHead;}
intmain(intargc,constchar* argv[]) {structnode*pHead =gen();display(pHead);pHead =reverse(pHead);
display(pHead);return0;}