回复
#jitoa#[单向链表的简单实现] 原创
『简单』
发布于 2023-12-28 19:22
浏览
0收藏
本博客由 金陵科技学院-开放原子开源社 曹东升编写
链表主要是便于管理长度或数量不确定的数据,相对于数组,链表处理这种数据时比较节省内存。动态语言通常不大需要链表,因为动态语言的解释器帮你管理内存,但当你对空间效率或插入动作的效率有特殊要求时也可在动态语言中使用链表。
链表常用于在程序中临时存储一组不定长的线性数据。
简单的介绍单向链表,如图
首先是一个head ,作为起始,然后每一个小方框里有一份要保存的数据和一个*next来指向下一个方框.
#include<stdio.h>
#include<stdlib.h>
typedef struct _node{
int x;
struct _node *next;//用来指向下一个方框
}node;
//相当于一个方框
typedef struct _list{
node *head;
}List;
//建立另一个结构体来存head,这样可以存放多个链表的head.还可以在后面使用函数时只用传递一个List所定义的变量的地址,而不是传递head指针的地址
然后函数声明,这边是加方框与打印函数
void print(List*list);
void add(List *plist,int num);
接着main函数
int main (){
List list;//list是个结构体里面有*head,即头指针
list.head=NULL;//初始化
int a;
while(scanf("%d",&a)){
if(a==-1){
break;
}
//传递数值
add(&list,a);
//在末尾加数值,而且这里只用传递list的地址,而不是头指针的地址.
}
print(&list);
return 0;
}
加一个数值的函数
void add(List *plist,int num){
node *p = (node*)malloc(sizeof(node));//申请内存
p->x = num;
p->next = NULL;//初始化
node *last = plist->haed;//用于找链表末尾
if(last){
while(last->next){
last = last->next;
}//找到最末尾
last->next = p;//在末尾使得next指向下一个方框
}else{
plist->next = p;//如果last是个空指针即现在为第一个数值时执行;
}
}
打印的函数
void print(List*list){
node *p = (node*)malloc(sizeof(node));//申请内存
for(p=list->head;p;p=p->next){
printf("%d\n",p->x);
}//从头指针的数值一个一个遍历,直到p是个空指针.
}
然后还可以减去一个数值,只要遍历找到数值所在的p方框后,再使p方框前一个方框q的next指针直接指向p的next就行,可以试试做.
for(q=NULL,p=list->head;p;q=p,p=p->next)
综上,就是一个简单的单向链表制作,然后这个可以用来做信息表等.
©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
标签
已于2023-12-28 19:22:41修改
赞
1
收藏
回复
相关推荐