1.简单的排序
#include <stdio.h>
void sort1(unsigned char *a, unsigned int n);
void sort2(unsigned char *a, unsigned int n);
void main()
{
unsigned int i;
unsigned char a[] = {12,15,100,1,0,3,2,4,8,9,6,11};
for(i = 0; i < sizeof(a);i++)
printf("%d ", a[i]);
sort2(a,sizeof(a));
for(i = 0; i < sizeof(a);i++)
printf("%d ", a[i]);
}
void sort1(unsigned char *a, unsigned int n)//按照选择法排序
{
unsigned int i,j,k;
unsigned int temp;
for(i = 0; i < n-1;i++)
{
k = i;
for(j = i+1; j < n; j++)//找到最小值
{
if(a[k] > a[j])
{
k = j;
}
}
temp = a[k];
a[k] = a[i];
a[i] = temp;
}
}
void sort2(unsigned char *a, unsigned int n)//冒泡法
{
unsigned int i,j;
unsigned int temp;
for(i = 0 ; i < n-1;i++)
{
for(j = 0;j< n-1-i;j++)
{
if(a[j] < a[j+1])
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
}
3 回文数的判断:98789, 这个数字正读是98789,倒读也是98789,正读倒读一样,所以这个数字就是回文数。
#include "stdio.h" int main(int argc, int *argv[]) { unsigned int a; unsigned int m =0,n = 0; printf("输入一个数"); scanf( "%d" , &a); n = a; while (n != 0) { m = m*10 + n % 10; n /= 10; } if (m == a) { printf("该数是回文数\n"); } printf( "不是回文数\n" ); return 0; }
4. 简单的遍历过程集合(linux gcc)
#include <stdio.h>
typedef struct{ int n; int *next; }node; node *create_list(int n) { int i; node *header, *p1, *p2; p1 = header = malloc(sizeof(node)); if(p1 == NULL) { return NULL; } header->n = 1; printf("创建节点:%d\n", p1->n); for(i = 2; i <= n; i++) { p2 = malloc(sizeof(node)); if(p2 == NULL) { return NULL; } p2->n = i; if(i == n) { p1->next = p2;//做链表连接 p2->next = NULL; printf("创建最后一个节点%d\n",p2->n); } else { p1->next = p2;//做链表连接 p1 = p2; printf("创建节点:%d\n", p2->n); } } return header; } void delete_list(node *hd) { node *p1, *p2; p1 = p2 = hd; int i = 0; while(p1->next != NULL) { p2 = p1->next; printf("删除节点%d\n",p1->n); free(p1); p1 = p2; } printf("删除最后的节点%d\n",p1->n); free(p1); } void list_node(node *hd) { node *p1; p1 = hd; printf("遍历链表开始\n"); while(p1->next != NULL) { printf("节点号:%d\n", p1->n); p1 = p1->next; } printf("节点号:%d\n", p1->n); printf("遍历链表结束\n"); } node *insert_node(node *hd, node *new_node) { node *p1, *p2, *p3; p1 = hd; if(new_node->n < hd->n)//插入在链表头 { new_node->next = hd; hd = new_node; printf("插入一个节点到链表头\n"); return hd; } if(new_node->n == hd->n) { printf("已存在该头节点,插入失败\n"); return hd; } p2 = p1;//p2为前节点 p1 = p1->next;//p1为当前节点 while(p1->next != NULL) { p3 = p1->next; if((p1->n < new_node->n) && (p3->n > new_node->n))//插入一个节点成功 { p2->next = new_node; new_node->next = p1; return hd; } if(p1->n == new_node->n) { printf("已存在该节点,插入失败\n"); return hd; } p2 = p1; p1 = p1->next; } if(p1->n == new_node->n) { printf("已存在该尾节点,插入失败\n"); return hd; } p1->next = new_node; new_node->next = NULL; //插入到尾节点 return hd; } node *delete_node(node *hd, int n) { node *p1 = hd; node *p2; if(hd->n == n) // 删除链表头 { hd = p1->next; free(p1); return hd; } p2 = p1; p1 = p1->next; while(p1->next != NULL) { if(p1->n == n) { p2->next = p1->next; free(p1); return hd; } p2 = p1; p1 = p1->next; //指向下一节点 } free(p1); p2->next = NULL;// 删除最后一个节点 return hd; } int main(char argc, char *argv[]) { node *list; node *new_node = malloc(sizeof(node)); new_node->n = atoi(argv[2]); list = create_list(atoi(argv[1])); list_node(list); list = insert_node(list,new_node); list_node(list); list = delete_node(list, 2); list_node(list); return 1; }