【9-1-5】简单链表,链式存储

来源:互联网 发布:淘宝收藏店铺看不到 编辑:程序博客网 时间:2024/06/05 02:04

链表有单链表,双链表,环链表

做一模块,用链表防止内存泄漏,定义一个链表,需要一结构体

链表内存不是连续的,链表的缺点,找某个数字。数组就找到a[5],而链表还要链式遍历才可以找到,查找没有优势


1:一般的形式打印出链表

//创建一个struct这样类型的结构体,
struct MyStruct
{
int data;//数据域
struct MyStruct *pNext;//指针域,任何类型的指针都是4个字节,它的大小就确定了
};

void main()
{
struct MyStruct *p;//头结点
//分别创建几个结构体s1.s2,s3,s4,s5
struct MyStruct s1;
struct MyStruct s2;
struct MyStruct s3;
struct MyStruct s4;
struct MyStruct s5;
//向简单的把他们链起来,怎么连
s1.data = 1;
s2.data = 2;
s3.data = 3;
s4.data = 4;
s5.data = 5;
p = &s1;
s1.pNext = &s2;
s2.pNext = &s3;
s3.pNext = &s4;
s4.pNext = &s5;
s5.pNext = NULL;


printf("%d\n",p->data);
printf("%d\n", p->pNext->data);
printf("%d\n", p->pNext->pNext->data);
printf("%d\n", p->pNext->pNext->pNext->data);
printf("%d\n", p->pNext->pNext->pNext->pNext->data);

system("pause");
}

2://创建一指针px等于p,用for循环的方式遍历这个链表

//创建一个struct这样类型的结构体,
struct MyStruct
{
int data;//数据域
struct MyStruct *pNext;//指针域,任何类型的指针都是4个字节,它的大小就确定了
};

void main()
{
struct MyStruct *p;//头结点
//分别创建几个结构体s1.s2,s3,s4,s5
struct MyStruct s1;
struct MyStruct s2;
struct MyStruct s3;
struct MyStruct s4;
struct MyStruct s5;
//向简单的把他们链起来,怎么连
s1.data = 1;
s2.data = 2;
s3.data = 3;
s4.data = 4;
s5.data = 5;
p = &s1;
s1.pNext = &s2;
s2.pNext = &s3;
s3.pNext = &s4;
s4.pNext = &s5;
s5.pNext = NULL;
       //创建一指针px等于p,用循环的方式遍历这个链表
for (struct MyStruct *px = p; px != NULL;px=px->pNext)//轮巡
{
printf("%d %p %p\n",px->data,px,px->pNext);
}

system("pause");
}

3://用递归把这个链表打印出来,递归就是一个函数调用的过程,(顺序和逆序,printf放在上面是顺序,放在下面是逆序)

//创建一个struct这样类型的结构体,
struct MyStruct
{
int data;//数据域
struct MyStruct *pNext;//指针域,任何类型的指针都是4个字节,它的大小就确定了
};

void show(struct MyStruct *p)//参数必须是一指针
{
if (p==NULL)
{
return;
}
else{
//printg放在上面是顺序
printf("%d %p %p\n",p->data,p,p->pNext);
show(p->pNext);//跳到下一个结点

/* printf放在下面是逆序
show(p->pNext);//跳到下一个结点
printf("%d %p %p\n", p->data, p, p->pNext);*/
}
}

void main()
{
struct MyStruct *p;//头结点
//分别创建几个结构体s1.s2,s3,s4,s5
struct MyStruct s1;
struct MyStruct s2;
struct MyStruct s3;
struct MyStruct s4;
struct MyStruct s5;
//向简单的把他们链起来,怎么连
s1.data = 1;
s2.data = 2;
s3.data = 3;
s4.data = 4;
s5.data = 5;
p = &s1;
s1.pNext = &s2;
s2.pNext = &s3;
s3.pNext = &s4;
s4.pNext = &s5;
s5.pNext = NULL;
        
用递归把这个链表打印出来,递归就是一个函数调用的过程,(顺序和逆序,printf放在上面是顺序,放在下面是逆序)
show(p);

system("pause");
}

4: 用while循环打印链表



//创建一个struct这样类型的结构体,
struct MyStruct
{
int data;//数据域
struct MyStruct *pNext;//指针域,任何类型的指针都是4个字节,它的大小就确定了
};

void main()
{
struct MyStruct *p;//头结点
//分别创建几个结构体s1.s2,s3,s4,s5
struct MyStruct s1;
struct MyStruct s2;
struct MyStruct s3;
struct MyStruct s4;
struct MyStruct s5;
//向简单的把他们链起来,怎么连
s1.data = 1;
s2.data = 2;
s3.data = 3;
s4.data = 4;
s5.data = 5;
p = &s1;
s1.pNext = &s2;
s2.pNext = &s3;
s3.pNext = &s4;
s4.pNext = &s5;
s5.pNext = NULL;
      //用while循环怎么做
while (p!=NULL)
{
printf("%d",p->data);
p = p->pNext;

}
system("pause");
}

0 0
原创粉丝点击