目录
qsort函数
qsort函数 是C语言自带的排序函数,头文件需要两个
stdio.h 和 search.h
qsort一共四个变量
第一个变量:排序的元素的首地址,一般用数组名
第二个变量:排序的次数 如果全排就是数组长度
第三个变量 排序元素的字节大小 sizeof(类型名)
第四个变量需要自己写一个函数 返回值是int 有两个形参 他们都是const保护的空指针
const void * a 和 const void * b
写一个例子
int cmp(const void * a ,const void * b)
{
return *(int*)a-*(int*)b;
}
这里的return 解释一下 由于返回值为int 但是传入的形参为void* 型的
,需要强制转化为int* ,再解引用得到的就是int了
现在我们会了这个函数了操作一番试试吧
发现确实 排序了 。默认是升序的
如果想要降序怎么办?
很简单,qsort 函数的形参最后一个指针函数 的返回值加一个符号就行了
C++排序还有一个函数叫做sort 比qsort要容易
sort(数组名,数组名+数组长度)
感兴趣的小伙伴可以搜搜
malloc动态开辟内存
malloc 是一个函数 其形参是要开辟的内存的大小,返回值是 void* 常常需要强制转化
例如动态开辟一个单链表的节点:
int *p=(struct Node*)malloc(sizeof(struct Node));
//指针变量p指向动态开辟的内存(类型是struct Node)
KiKi学结构体和指针_牛客题霸_牛客网 (nowcoder.com)
这道题是单链表的创建和删除一个数
重定义
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//单链表的创建
struct Node
{
int date;
struct Node* next;//next 指向的也是一个结构体
};
int main()
{
int m;
int n;
scanf("%d",&n);
struct Node* list = NULL;
struct Node* tail = NULL;
for (int i = 0; i < n; i++)
{
scanf("%d",&m);
struct Node* pn = (struct Node*)malloc(sizeof(struct Node));
pn->date = m;
pn->next = NULL;
//每次输入创建一个节点
//第一个节点链接的时候
if (list == NULL)
{
list = pn;
tail = pn;//注意尾指针一定要指向尾部 无论是第一次还是以后
}
else
{
tail->next = pn;
tail = pn;
}
}
//接下来执行删除操作
int d;
struct Node* cur = list;
struct Node* del = NULL;
struct Node* prev = NULL;
scanf("%d", &d);//要删除的元素d
while (cur)
{
if (cur->date == d)//执行删除操作
{
struct Node* pd = cur;
//如果删除的是第一个元素
if (list == cur)
{
//prev = cur;
list = list->next;
cur = list;
}
else//如果删除的是第一个以后的元素
{
prev->next = cur->next;
cur = cur->next;
}
n--;
free(pd);
}
else//执行下一个判断cur
{
prev = cur;
cur = cur->next;
}
}
printf("%d\n",n);
cur =list;//删除完了以后cur指向了NULL 此时输出要把它指向头指针
while (cur)
{
printf("%d ", cur->date);
cur = cur->next;
}
cur = list;
struct Node* dele = NULL;
while (cur)
{
del = cur;
cur = cur->next;
free(dele);
}
return 0;
}
free的节点一般用另一个指针表示 不用cur;
还有一篇总结,单独写出来一个数据结构的栏目
本文含有隐藏内容,请 开通VIP 后查看