数据结构----链表
链表有查找 删除 插入 排序 等等一系列的操作
//首先还是要先从定义开始
#include<stdio.h>
#include<stdlib.h>
struct kk {
int sum;//存储数值
struct kk *m;//指针从而指向下一个结构体
};
void *hh(struct kk *he)//此函数为删除链表的内存
{
struct kk *n1,*n2;
n1=n2=NULL;
n1=he;
//每次循环渐进删除,直到最后一项,退出循环后,再单独删除
while(n1->m!=NULL)
{
n2=n1->m;
n1->m=n2->m;
free(n2);
}
free(he);
return NULL;
}
## 排序
//链表可以像数组一样也可以对其中的值进行排序(升序或降序)
//由于链表每次比较都要遍历,所以我感觉选择排序和冒泡排序没有时间差距吧(这个不怎么确定)
//但是下面我是用的冒泡排序
void sj(struct kk *mm)
{
//因为用到了函数,所以还是要定义两个指针来进行比较大小
struct kk *n1,*n2;
for(n1=mm; n1!=NULL;n1=n1->m)
{
for(n2=n1->m;n2!=NULL;n2=n2->m)
{
struct kk huan;
if(n1->sum > n2->sum)
{
huan.sum=n1->sum;
n1->sum=n2->sum;
n2->sum=huan.sum;
}
}
}
}
int main()
{
//这个地方我们是先建立了四个简单的结构体 a b c d ,然后用他们的指针
//先关联就是一个链表
struct kk *a,*b,*c,*d;
//先定义几个结构体指针 然后利用malloc分配内存
a=(struct kk *)malloc(sizeof(struct kk));
b=(struct kk *)malloc(sizeof(struct kk));
c=(struct kk *)malloc(sizeof(struct kk));
d=(struct kk *)malloc(sizeof(struct kk));
//接下来,对结构体指针内的变量赋值
a->sum=4;
b->sum=8;
c->sum=2;
d->sum=10;
struct kk *p=NULL;//在定义一个空指针指向头节点
p=a;
//后面的指针分别指向下个结构体
a->m=b;
b->m=c;
c->m=d;
d->m=NULL;//最后一项的·指针指向NULL
//链表的插入删除
1.插入(这里以 e 插入在 b 和 c 之间为例)
struct kk * e;
e=(struct kk *)malloc(sizeof(struct kk));
e->sum=100;
e->m=c->m;
c->m=e;
2.删除(这里以删除 b 为例)
a->m=b->m;
## 查找(这里以找到数值“8”为例)
while(p!=NULL)
{
if(p->sum==8)
printf("找到了");
p=p->m;
}
##输出链表数值
//可以循环输出链表的值,
while(p!=NULL)//括号内可以写p!=NULL或者单独的一个 p
{
printf("%d ",p->sum);
p= p->m;
}
system("pause");
return 0;
}
以上就是我所知道的,内容如有错还请指出,谢谢。