编程常见必备知识
链表介绍:
用结构体变量建立链表是最合适的
一.简单的静态链表
#include<stdio.h>
struct Student
{
int num;
float score;
struct Student* next;
};
int main()
{
struct Student a, b, c, head, p;
a.num = 10101;a.score = 89.5;
b.num = 10103;b.score = 90;
c.num = 10107;c.score = 85;
head = &a;
a.next = &b;
b.next = &c;
c.next = NULL;
p = head;
do
{
printf("%ld %5.1f\n", p->num, p->score);
p = p->next;
} while (p != NULL);
return 0;
}
二.动态链表
知识要点连接
动态内存分配与指向它的指针变量
1.malloc 函数开辟动态存储区
void*malloc(unsigned int size);
内存的动态存储区分配一个长度为 size 的连续空间
malloc(100) //开辟 100 字节的临时分配域,函数值为其第一个字节的地址
2.calloc 函数开辟动态存储区
void*calloc(unsigned n,unsigned size);
内存的动态存储区分配 n 个长度为 size 的连续空间,空间较大,足以包含一个数组
n 为数组元素个数,每个元素长为 size
3.用 realloc 函数重新分配动态存储区
voidrealloc(voidp,unsigned int size);
改变动态空间的大小,用此函数重新分配
realloc(p,50)将 p 所指向的已分配动态空间改为 50 字节
4.用 free 释放动态存储区
void free(void*p);
free(p);释放 p 所指向的动态空间
以上四个函数声明在 #include<stdlid>中
函数技巧注意:
类型一.输入数字排顺序
这种问题相当于排顺序的问题
一般采用 swap 函数(无类型函数),如下
void swap(intp1,intp2)
{
int p;
p=p1;p1=*p2;*p2=p;
}
类型二.字符串排序
运用的仍然是 swap(这个名字自己起的)函数
void swap(charp1,charp2)
{
char p[20];
strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p);
}
提醒:字符串互换的主函数也需要注意
进行判断时候要用 strcmp 函数进行判断
开头要输入 #include<string.h>头文件
类型三.选择法进行排序
(循环语句的运用,本题用结构体数组举例,若未学习到,看中间部分了解算法即可)
struct Student temp; //temp 用于变换
const int n=5; //定义常变量
int i,j,k; //i,j 用于循环
for(i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)
if(stu[j].score>stu[i].score)
k=j;
temp=stu[k];stu[k]=stu[i];stu[i]=temp;
}
评论