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;
}

被折叠的 条评论
为什么被折叠?



