IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 11.21周记 -> 正文阅读

[数据结构与算法]11.21周记

(什么是链表。

链表是一种常见的基础数据结构,结构体指针在这里得到了充分的利用。链表可以动态的进行存储分配,也就是说,链表是一个功能极为强大的数组,他可以在节点中定义多种数据类型,还可以根据需要随意增添,删除,插入节点。链表都有一个头指针,一般以head来表示,存放的是一个地址。

head指向第一个元素:第一个元素又指向第二个元素;……,直到最后一个元素,该元素不再指向其它元素,它称为“表尾”,它的地址部分放一个“NULL”

(1).建立简单的静态链表。

#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=89;
	
	head=&a;
	a.next=&b;
	b.next=&c;
	c.next=NULL;
	p=head;
	do
	{
		printf("%ld %5.1f\n",p->num,p->score);
		p=p->next;
	}while(p!=NULL);
	return 0;
}

为了建立链表,使head指向a结点,a.next指向b结点,b.next指向c结点。构成一个链表。

再让c.next=null。

静态链表的所有结点都是定义的,不是临时开辟的,也不能用完后释放。

(2)建立动态链表。

#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(struct student)


struct student{
long num;
float score;
struct student *next;
};

int n;
struct student *creat(void)
{
struct student *head,*p1,*p2;
n=0;
p1=p2=(struct student *)malloc(LEN);         //用malloc函数开辟第一个节点。
   
scanf("%d,%f",&p1->num,&p1->score);         //向 p1 指针指向的地址添加数据

head=NULL;                                  // 先让头指针为空
while(p1->num!=0)  //约定学号不为0
{
n=n+1;
if(n==1)
head=p1;      //将 p1 指针 指向的地址赋给 head     
else
p2->next=p1;   
p2=p1;       //将 p1 所指向的地址赋给 p2  


p1=(struct student *)malloc(LEN);   // p1 再重新指向一个新开辟的地址       
scanf("%d,%f",&p1->num,&p1->score);  //输入其他学生的数据
}
p2->next=NULL;  //最后赋予NULL;
    return(head);
}


int main(){
struct student *pt;
pt=creat();

printf("%d %5.1f ",pt->num,pt->score);

   printf("\n");
}

分析

这个算法的思路是让p1指向新开辟的结点,p2指向链表中最后一个结点,把p1所指向的结点连接在p2所指向的结点后面。

(3)输出链表。

#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(struct student)
struct student{
long num;
float score;
struct student *next;
};

int n;
void print(struct Student *head) 
{
	struct Student *p;
	p=head;
	if(head!=NULL)
	do{
		printf("%d %5.1f\n",p->num,p->score);
		p=p->next;
	}while(p!=NULL);
	
}

知道head的值,然后设一个指针变量p,先指向第一个结点,输出p所指的结点,然后使p后移一个结点,再输出,直到链表的尾结点。

(4)关于链表的基本操作

求单链表表长

int length(linklist L)
{
int l=0;
while(L->next!=0)
   {l++;
    L=L-next;
    }
  return l;
}

修改链表结点值

void change(LinkList *list,int n) {//n为第n个节点
	LinkList *t = list;
	int i = 0;
	while (i < n && t != NULL) {
		t = t->next;
		i++;
	}
	if (t != NULL) {
		puts("输入要修改的值");
		scanf("%d", &t->score);
	}
	else {
		puts("节点不存在");
	}
}

删除链表结点

void delet(LinkList *list, int n) {
	LinkList *q = list, *p;
	int i = 0;
	while (i < n && t != NULL) {
		p = q;
		q = q->next;
		i++;
	}
	if (t != NULL) {
		p->next = q->next;
		free(t);
	}
	else {
		printf("节点不存在");
	}
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-11-22 12:35:49  更:2021-11-22 12:37:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 12:20:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码