线性表之链式存储(二)

一.准备

我们首先准备用于存储的结构体(以学生信息为例)

typedef struct //创建学生信息的结构体变量
{
char name[];
int age;
char num[];
}stu;

typedef struct element//创建用于存储的结构体变量
{
stu info;
struct element* Next=NULL;
}ele;

int main()
{
ele* start =(ele ** )malloc(100×sizeof(ele))

return 0;
}

二.增删查改及释放(为了加以区分,我们用~代替*)

1.增加一个元素我们需要完成这几步
(1)找到链表中该位置
(2)增加该元素
void Listadd(ele~start,int n,ele~ptr)//n为增加的位置,ptr为要增加的元素
{
assert(n<100);
assert(start);
ele~p=start;
while(p->Next&&n--)
{
p=p->Next;
}
ptr->Next=(p->Next)->Next;
p->Next=ptr;
}
2.删除一个元素与其大同小异,不再赘述。
3.查找一个元素
(1)找到该元素的位置
(2)返回其指针
ele~ Listfind(ele~start,int n)
{
ele~p=start;
assert(p);
assert(n<100);
p= p ->Next;
while(p&&n--)
{
p=p->Next;
}
return p;
4.修改一个元素
(1)寻找到该位置的元素
(2)修改
void Listchange(ele~start,int n,ele~ptr)
{
ele~p=start;
assert(p);
assert(n<100);
while(p&&n--)
{

        p=p->Next;
        }

        ptr->Next=p->Next;
        p->Next=ptr;

}
5.释放链表
void Freelist(ele~start)
{
ele~p=start;
assert(p);
ele~tmp=NULL;
while(p->Next)
{
tmp=p;
p=p->Next;
free(p);
}
p=NULL;
}

三.我们将会讲解上一篇开头所提问的问题

将两个数组内的所有元素按照从大到小的顺序排成一个大数组
这道题其实并不难,但是如果要节省空间的话,不妨利用链表

线性表之链式存储(二)
如图,先将两个数组分别按照从大到小的顺序开始排列,然后p与q指针所指的元素比较大小,指向较小元素的指针加一;再比较。第一次比较把较大的元素保留,之后的比较中,把每次比较中较大的元素的地址存储到上一次比较中大的元素的指针域中。

猜你喜欢

转载自blog.51cto.com/14961637/2657485
今日推荐