#include <stdio.h>
typedef struct node
{
int num;
struct node* next;
}Lnode;
int Dele(Lnode* head,int num)
{
Lnode* delnode = head;
Lnode* forword = head;
if(head == NULL) return -1;
else
{
while((delnode->num != num) && (delnode ->next != NULL))
{
forword = delnode;
delnode = delnode->next;
}
if(delnode->next == NULL && delnode->num != num) return -1;
if(delnode == head)
{
head = head->next;
}
else if(delnode->next == NULL)
{
forword->next = NULL;
}
else
{
forword->next = delnode->next;
}
printf("delnode->next is 0x%lx\n",delnode->next);
free(delnode);
delnode = NULL;
}
}
void InSert(Lnode* head,int num)
{
Lnode* tail = head;
while(tail->next != NULL)
{
tail = tail->next;
}
Lnode* node = (Lnode*)malloc(sizeof(Lnode));
node->num = num;
node->next = NULL;
tail->next = node;
}
int main()
{
Lnode* head = NULL;
Lnode* innode = NULL;
Lnode* tail = NULL;
int i = 0;
innode = (Lnode*)malloc(sizeof(Lnode));
innode->num = 0;
for(i = 1;i <= 3;i++)
{
if(head == NULL) head = innode;
tail = innode;
innode = (Lnode*)malloc(sizeof(Lnode));
innode->num = i;
printf("i is %d\n",i);
innode->next = NULL;
tail->next = innode;
}
Lnode* p = head;
while(p != NULL)
{
printf("p->num is %d\n",p->num);
p = p->next;
}
InSert(head,4);
p = head;
while(p != NULL)
{
printf("p->num is %d\n",p->num);
p = p->next;
}
int result = Dele(head,2);
printf("result is %d\n",result);
p = head;
while(p != NULL)
{
printf("p->num is %d\n",p->num);
p = p->next;
}
p = head;
while(p != NULL)
{
free(p);
p = p->next;
}
return 0;
}
一、冒泡排序
#include <stdio.h>
int paixv(int* a,int num)
{
int i = 0; int j = 0; int temp = 0;
for(i = 0;i < num;i++)
{
for(j = i; j < num; j++)
{
if(a[i] >= a[j])
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
return 0;
}
int main()
{
int a[10] = {2,5,9,7,1,0,8,6,4,10};
int result = paixv(a,10);
int i = 0;
for(;i < 10;i++)
printf("%d,",a[i]);
return 0;
}
二、自己完成srtcpy函数
#incluce <stdio.h>
#define INPUT
int My_StrCpy(char* src, char* dst)
{
if(src == NULL || dst == NULL)
{
printf("TK------>>>>>this is error\n");
return -1;
}
while(*src != '\0')
{
*dst = *src;
src ++;
dst ++;
if(*dst == '\0') break;
}
return 0;
}
int main()
{
#ifdef INPUT
char a[10];
char b[4];
printf("please input src:\n");
scanf("%s",a);
printf("please input dst:\n");
scanf("%s",b);
#else
char a[10] = "1234";
char b[10] = "4321";
#endif
int result = My_StrCpy(a,b);
printf("TK---->>>>a is %s,b is %s\n",a,b);
return 0;
}
三、斐波那契数列
#include <stdio.h>
int FiBo(int i)
{
if(i == 1 || i == 2)
{
return 1;
}
else
{
return FiBo(i - 1) + FiBo(i - 2);
}
}
int main()
{
int num = 0;
printf("please input :\n");
scanf("%d",&num);
int i = 1;
for(;i <= num;i++)
{
printf("%d,",FiBo(i));
}
return 0;
}
四、查找子字符串
#include <stdio.h>
int FindSubString(char* str,char* substr)
{
int result = 1;
char* sub = substr;
while(*str != '\0')
{
sub = substr;
if(*sub != *str)
{
str++;
result++;
continue;
}
while(*sub != '\0')
{
if(*str == *sub)
{
str++;
sub++;
result++;
}
else break;
}
if(*sub == '\0') return result - (sub - substr);
}
return -1;
}
int main()
{
char a[20] = "01133412123456";
char b[4] = "123";
int result = FindSubString(a,b);
printf("result is %d\n",result);
return 0;
}
五、自己写strcmp函数
#include <stdio.h>
int My_Strcmp(char* src, char* dst)
{
if(src == NULL && dst == NULL) return -1;
while(*src != '\0' && *dst != '\0')
{
if(*src != *dst) break;
src++;
dst++;
}
if(*src == '\0' && *dst == '\0') return 0;
else return -1;
}
int main()
{
char a[10];
char b[10];
printf("please input a:\n");
scanf("%s",a);
printf("please input b:\n");
scanf("%s",b);
int result = My_Strcmp(a,b);
printf("result is %d\n",result);
return 0;
}
六、回文数
#include <stdio.h>
#include <string.h>
int huiwen(char* p)
{
if(p == NULL) return -1;
char* pbegin = p;
char* pend = p;
while(*pend != '\0')
{
pend ++;
}
pend --;
while(pbegin < pend)
{
if(*pbegin != *pend)
{
return 0;
}
else
{
pbegin ++;
pend --;
}
}
return 1;
}
int main()
{
char a[64];
printf("please input :\n");
scanf("%s",a);
int result = huiwen(a);
printf("result is %d\n",result);
return 0;
}
七、一些机试题
1.
给定一个数组input[] ,如果数组长度n为奇数,则将数组中最大的元素放到 output[] 数组最中间的位置,如果数组长度n为偶数,则将数组中最大的元素放到 output[] 数组中间两个位置偏右的那个位置上,然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。
例如:input[] = {3, 6, 1, 9, 7} output[] = {3, 7, 9, 6, 1}; input[] = {3, 6, 1, 9, 7, 8} output[] = {1, 6, 8, 9, 7, 3}函数接口 void sort(int input[[, int n, int output[])
#include <stdio.h>
void sort(int input[],int n,int output[])
{
int i = 0; int j = 0; int k = 0; int temp = 0; int flag = 0;
for(;i < n;i++)
{
for(j = i; j < n;j++)
{
if(input[i] < input[j])
{
temp = input[i]; input[i] = input[j]; input[j] = temp;
}
}
if(flag == 0)
{
output[n/2 + k] = input[i];
printf("output[%d] is %d\n",n/2 + k,input[i]);
flag = 1;
}
else
{
k++;
output[n/2 - k] = input[i];
printf("output[%d] is %d\n",n/2 - k,input[i]);
flag = 0;
}
}
}
int main()
{
int i = 0;
int output[10];
#ifdef IS_5
int input[10] = {3,6,1,9,7};
sort(input,5,output);
for(;i < 5;i++)
#else
int input[10] = {3, 6, 1, 9, 7, 8};
sort(input,6,output);
for(;i < 6;i++)
#endif
printf("%d,",output[i]);
return 0;
}
2.
操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。其中,系统任务的优先级 < 50,用户任务的优先级 >= 50且 <= 255。优先级大于255的为非法任务,应予以剔除。现有一任务队列task[],长度为n,task中的元素值表示任务的优先级,数值越小,优先级越高。函数scheduler实现如下功能,将task[] 中的任务按照系统任务、用户任务依次存放到 system_task[] 数组和 user_task[] 数组中(数组中元素的值是任务在task[] 数组中的下标),并且优先级高的任务排在前面,优先级相同的任务按照入队顺序排列(即先入队的任务排在前面),数组元素为-1表示结束。例如:task[] = {0, 30, 155, 1, 80, 300, 170, 40, 99} system_task[] = {0, 3, 1, 7, -1} user_task[] = {4, 8, 2, 6, -1}函数接口 void scheduler(int task[], int n, int system_task[], int user_task[])
#include <stdio.h>
void scheduler(int task[], int n, int system_task[], int user_task[])
{
int sys_id[10];
int us_id[10];
int i = 0; int stotal = 0; int utotal = 0;
for(;i < n;i++)
{
if(task[i] >= 50 && task[i] <= 255)
{
us_id[utotal] = task[i];
user_task[utotal] = i;
utotal++;
}
else if(task[i] < 50)
{
sys_id[stotal] = task[i];
system_task[stotal] = i;
stotal++;
}
}
i = 0; int j = 0; int tempid = 0; int temp;
for(;i < utotal;i++)
{
for(j = i;j < utotal;j++)
{
if(us_id[i] > us_id[j])
{
temp = user_task[i];
user_task[i] = user_task[j];
user_task[j] = temp;
tempid = us_id[i];
us_id[i] = us_id[j];
us_id[j] = tempid;
}
}
}
user_task[utotal] = -1;
i = 0; j = 0;
for(;i < stotal;i++)
{
for(j = i;j < stotal;j++)
{
if(sys_id[i] > sys_id[j])
{
temp = system_task[i];
system_task[i] = system_task[j];
system_task[j] = temp;
tempid = sys_id[i];
sys_id[i] = sys_id[j];
sys_id[j] = tempid;
}
}
}
system_task[stotal] = -1;
}
int main()
{
int task[9] = {0, 30, 155, 1, 80, 300, 170, 40, 99};
int system_task[20];
int user_task[20];
scheduler(task,9,system_task,user_task);
int i = 0;
printf("user_task is :\n");
while(user_task[i] != -1)
{
printf("%d",user_task[i]);
i++;
}
i = 0;
printf("\nsystem_task is :\n");
while(user_task[i] != -1)
{
printf("%d",system_task[i]);
i++;
}
return 0;
}