校招基础总结(IT)

来源:互联网 发布:支持向量回归算法 编辑:程序博客网 时间:2024/05/19 10:38

1.strdup函数的实现

char *strdup(char *str){int len = strlen(str)+1;char *t = NULL;if (str && (t = (char *) malloc(len))){strcpy(t,str);}return t;}

2.合并两个有序链表

typedef struct _link_t{int val;struct _link_t *next;}link_t;link_t *merge(link_t* ln1, link_t* ln2){if (ln1 == NULL){return ln2;}if (ln2 == NULL){return ln1;}link_t *ln = NULL;if (ln1->val < ln2->val){ln = ln1;ln->next = merge(ln->next,ln2);}else {ln = ln2;ln->next = merge(ln1,ln->next);}return ln;}

3.给定一个int 数组,给出其中连续子序列的最大和

#define INF 1000int maxsum_base (int *arr,int size ,int &start , int &end){int maxsum = -INF;for (int i = 0;i < size; ++i){int sum = 0;for (int j = i;j<size;++j){sum += arr[j];if (sum > maxsum){maxsum = sum;start = i;end = j;}}} return maxsum;}

4.二进制文件读写

#include <stdio.h>#include <stdlib.h>struct Student{long unsigned id;char name[20];double grades;};typedef struct Student Student;int main(){Student s;//char ch,num[20];FILE *fp;fp = fopen("D:\\st.rec","rb");if (!fp){printf("file cannot be opened");exit(1);}//do{//ch = getchar();//getchar();//if(ch =='n')//break;//printf("id: ");//gets(num);//s.id = atol(num);//printf("name: ");//gets(s.name);//printf("grades: ");//gets(num);//s.grades = atof(num);//fwrite(&s,sizeof(s),1,fp);//}while(1);while(fread(&s,sizeof(s),1,fp)==1)printf("%Ld: %-10s%g\n",s.id,s.name,s.grades);fclose(fp);system("pause");return 0;}

5.
//两个排序的数组求中位数int find(int *ls, int *rs ,int size){if( ls == NULL || rs == NULL || size <= 0)return -1;int lsbegin = 0, rsbegin = 0;int lsend = size - 1, rsend = size - 1;int result;while(lsbegin < lsend && rsbegin < rsend){if(lsbegin == lsend - 1 && rsbegin == rsend - 1)break;else{int lsmiddle = (lsbegin+lsend)>>1;int rsmiddle = (rsbegin+rsend)>>1;if(ls[lsmiddle] == rs[rsmiddle]){result = ls[lsmiddle];break;}else if (ls[lsmiddle] > rs[rsmiddle]){lsend = lsmiddle;rsbegin = rsmiddle;}else{lsbegin = lsmiddle;rsend = rsmiddle;}}}if(lsbegin == lsend && rsbegin == rsend)result = min(ls[lsbegin],rs[rsbegin]);else if ( lsbegin == lsend - 1 && rsbegin == rsend - 1){if ( ls[lsbegin] < rs[rsbegin])result = min(ls[lsend],rs[rsbegin]);elseresult = min(ls[lsbegin],rs[rsend]);}return result;}

6.

//链表反转 非递归写法typedef struct link{int data;struct link *next;}LINK;LINK *reverse(LINK *head){if(head == NULL)return;LINK *first = head;LINK *second = head->next;first->next = NULL;while(second != NULL){LINK *third = second->next;second->next = first;first = second;second = third;}return first;}//递归写法LINK *reverse(LINK *first,LINK *second){if(second == NULL)return first;LINK *third = second->next;second->next = first;return reverse(second,third);}

7.
//递归二叉树先序遍历typedef struct Node{int data;struct Node *left,*right;}NODE;void preorder(NODE *T){   if(T == NULL)   return;   visit(T->data);   preorder(T->left);   preorder(T->right);}//非递归 void pretraverse(NODE *T) { stack<NODE *> s; NODE *p = T; s.push(T); while(p||!s.empty()) { p = s.top(); s.pop(); visit(p); if(p->right) s.push(p->right); if(p->left) s.push(p->left); } }
8.
 //链表有环 typedef struct link { int data; struct link *next; }LINK;bool G(LINK *L){LINK *slow = L->next;LINK *fast = L->next->next;while(slow != NULL){slow = slow->next;fast = fast->next->next;if (slow->data == fast->data)return true;}return false;}
9.

//返回不超过x的最大2的整数次冥int G(unsigned int x){unsigned int t = 1;x>>1;while(x){x>>=1;t<<=1;}return t;}

10.ip地址转换为整数

#include<stdio.h>#include<stdlib.h>int main(){char ip[]="0.3.1.29";int sum=0,i=0,j=0,n=0;int cnt=4;char tmp[4];while(cnt>0){int tmpsum=0;//不要只记得开始的sum初始化,任何边写边新曾的变量都要初始化,否则结果不对!if(ip[j]!='.'){tmp[i]=ip[j]; i++;j++;}else{i=0;j++;            tmpsum=atoi(tmp);if (cnt!=1){for(n=cnt-1;n>=1;n--)tmpsum*=256;}cnt--;            }sum+=tmpsum;}printf("%d\n",sum);system("pause");return 0;}


0 0