数据结构之链表基础入门理解

文章目录


前言

提示:这里可以添加本文要记录的大概内容:
链表是一种常见且十分重要的数据结构,按存储结构来说,它是区别于顺序存储(如数组)的一类逻辑关系与物理存储分离的数据结构。它是由一系列“结点”构成的,每个结点上又包含了元素的数据域和指针域(包含下一个结点的地址),这样就可以克服顺序存储机械的特点,可以动态的添加新的数据成员,但是它也有一些缺点,对于数据的访问特别依赖于头指针,需要像寻宝一样,不断获取线索向前推进。链表使用十分广泛,后续的线性表,树,图等等都有链式结构,本文主要介绍静态链表、动态链表的建立、插入、删除操作,后续会进行一些补充。


提示:以下是本篇文章正文内容,下面案例可供参考

一、链表

示例:

//第一个小小链表建立,加强理解链表的思路。
#include<stdio.h>
struct Student//建立结构体成员
  {int num;
   float score;
   struct Student *next;//指向结构体的数组,它是链表中的关键钥匙
   };
int main()
   {struct Student a,b,c,*head,*p;
    a.num=10101;a.score=89.5;
    b.num=10103;b.score=90;
    c.num=10107;c.score=88;
    head=&a;//头指针指向第一个元素
    a.next=&b;
    b.next=&c;
    c.next=NULL;//将尾指针设置为空,作为结束标志。
    p=head;
    do
    {printf("%ld %5.f\n",p->num,p->score);
     p=p->next;
	}while(p!=NULL);
	return 0;
	}
#include<stdio.h>
#include<stlib.h>
#define LEN sizeof(struct Student)
//构造链表函数
struct Student*creat(){
	struct Student*head,*p1,*p2;
	int n=0;
	p1=p2=(struct Student*)malloc(LEN);//动态分配内存
	scanf("%ld,%f",&p1->num,&p1->score);
	head=NULL;
	while(p1->num!=0){
		n=n+1;
		if(p1->num==1)
		head=p1;头指针开始
		else p2->next=p1;
		p2=p1;//将p2指向p1,并且把p1赋值给p2,方便再一次使用p1读入数据
		p1=(struct Stuent*)malloc(LEN);
		scanf("%ld,%f",&p1->num,&p1->score);
	}
	p2->next=NULL;
	return(head);//结束之后一定要返回首地址(头指针)
}
//输出链表值函数
void print(struct Student head){
	struct Student*p;
	p=head;
	if(head!=NULL)
	 do
	 {printf("%ld,%f",p->num,p->score);
	 p=p->next;}
	 while(p!=NULL);
	 }
 //链表插入操作,将数据元素e插入到第i个元素的位置
 ListInsert_L(Linklist &L,int i,(lei xing)e){
 	p=L;
 	j=0;
 	while(!p&&j<i-1){
 		p=p->next;++j;
	 }
	 s=new Lnode;//生成新的空间(c++)
s->data=e;s->next=p->next;
	 p->next=s;}//p在i-1的位置,原始指向第i的位置,现在使s指向原来的i上,再把s赋值给P的指针域
	 
//链表删除第i个数操作
ListDelete_L(Linklist &L,int i){
	p=L;j=0;
	while(!p->next&&j<i-1){
		p=p->next;++j;
	}
	q=new Lode;
	q=p->next;
	p->next=q->next;
	delete q;//同free函数一样}
	
	
}

注:以上为部分代码,若想上机运行,则还需要一些前置的申明定义,具体证明省略......

共勉之

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明日青辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值