2024-4-8 【链表】【】

简单静态链表

下面的代码是一个简单的静态链表,它由3个学生的数据(学号,成绩)的结点组成。请考虑:(1)head的作用(2)p的作用

//简单静态链表

#include

using namespace std;

struct student

{

long num;

float score;

struct student *next;

};

int main()

{

struct student a,b,c,*head,*p;

a.num=34341; a.score=81.5;

b.num=34341; b.score=81.5;

c.num=34341; c.score=81.5;

head=&a;

a.next=&b;

b.next=&c;

c.next=NULL;

p=head;

do

{

cout<num<<" "<score<<endl;

p=p->next;

}while(p!=NULL);

getchar();

}

处理动态链表的函数

1.malloc

函数原型为

void *malloc(unsigned int size);

作用是在内存的动态存储区中分配一个长度为size的连续空间。此函数返回的是一个指向分配域起始地址的指针,如果此函数未能成功地执行(如内存空间不足),则返回空指针(NULL)。

2.calloc

函数原型为

void *calloc(unsigned n,unsigned size);

作用是在内存的动态存储区中分配n个长度为size的连续空间。函数返回一个指向分配域起始地址的指针;如果分配不成功,则返回NULL。

3.free()

函数原型为

void free(void *p);

作用是释放由p指向的内存区,使这部分内存区能被其他变量使用。

动态链表的准备工作

一个完善的动态链表程序应该具有以下基本功能:建立链表,插入结点,删除结点,打印链表,释放链表等。扩展的动态链表程序还可能有获得链表长度,获得当前结点,查找结点位置,连续两个链表,比较两个链表等功能。下面将逐个实现其功能代码。

为了程序的易读性和可扩展性,有时需要在程序开头先进行预定义处理,请务必领会下面的代码用意,否则将影响对以后代码的理解

#include<stdlib.h>

#include<stdio.h>

typedef int ElemType; //以 ElemType 代表 int 型数据

typedef struct List *link; //以 link 代表链表指针

typedef struct List Lnode; //以 Lnode 代表链表结点

struct List

{

ElemType data; //此处仅以一个整型变量为例

struct List *next;

};

主函数的建立:下面的主函数只是一个简单调用各功能的示范例子,读者可自行修改和添加代码以完成更复杂的任务。请根据主函数的代码考虑各功能子函数的原型应如何建立。

int main()

{

int l;

link head1;

link head2;

head1=create(head1); //建立链表1

head2=create(head2); //建立链表2

connect(head1,head2); //连接两个链表

head1=insert(head1,888,5); //在位置5处插入元素888

head1=del(head1,3); //删除一个结点

display(head1); //打印链表

printf(“\n lenth is %d\n”,lenth(head1)); //打印链表长度

printf(“\n get is %d\n”,get(head1,3)); //获得当前结点值

printf(“\n locate 12 is %d”,lenth(head1,12)); //查找元素12所在的位置

head=setnull(head); //释放链表

}

链表的建立

由主函数调用create()函数的方式可知,该函数应该返回一个结点的指针,输入的参数也应该是一个结点指针,参考代码如下:

link create(link Head)

{

ElemType newData;

link NewPoint;

//先创建一个结点

Head=(link)malloc(sizeof(Lnoed));

printf(“please input number :\n”);

scanf(“%d”,&newData);

Head->data=newData; //结点赋值

Head->next=NULL; //结点指向空地址

while(1) //继续添加结点

{

NewPoint=(link)malloc(sizeof(Lnode));//开辟一个结点空间

if(NewPoint==NULL){//如果开辟空间失败,则返回

break;//此判断语句在某些类型的竞赛中用处不大,可忽略

}

printf(“please input number : input ‘-1’ means exit\n”);

scanf(“%d”,&newData);

if(newData==-1){ //输入-1则添加结点结束并返回head

return Head;

}

NewPoint->data=newData;

NewPoint->next=Head;

Head=NewPoint;

}

return Head;

}

最后

一次偶然,从朋友那里得到一份“java高分面试指南”,里面涵盖了25个分类的面试题以及详细的解析:JavaOOP、Java集合/泛型、Java中的IO与NIO、Java反射、Java序列化、Java注解、多线程&并发、JVM、Mysql、Redis、Memcached、MongoDB、Spring、Spring Boot、Spring Cloud、RabbitMQ、Dubbo 、MyBatis 、ZooKeeper 、数据结构、算法、Elasticsearch 、Kafka 、微服务、Linux。

这不,马上就要到招聘季了,很多朋友又开始准备“金三银四”的春招啦,那我想这份“java高分面试指南”应该起到不小的作用,所以今天想给大家分享一下。

image

请注意:关于这份“java高分面试指南”,每一个方向专题(25个)的题目这里几乎都会列举,在不看答案的情况下,大家可以自行测试一下水平 且由于篇幅原因,这边无法展示所有完整的答案解析
pring Cloud、RabbitMQ、Dubbo 、MyBatis 、ZooKeeper 、数据结构、算法、Elasticsearch 、Kafka 、微服务、Linux。

这不,马上就要到招聘季了,很多朋友又开始准备“金三银四”的春招啦,那我想这份“java高分面试指南”应该起到不小的作用,所以今天想给大家分享一下。

[外链图片转存中…(img-QgOKpY0N-1721129134968)]

请注意:关于这份“java高分面试指南”,每一个方向专题(25个)的题目这里几乎都会列举,在不看答案的情况下,大家可以自行测试一下水平 且由于篇幅原因,这边无法展示所有完整的答案解析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值