基础学习第二弹
来源:互联网 发布:阿里云dns设置 编辑:程序博客网 时间:2024/06/06 10:38
关键算法和数据结构
单链表
- 线性表:逻辑上相邻,物理上也相邻。
- 单链表:
数据域+指针域
如要操作链表,需要声明额外的指针。
单链表的创建算法
定义一个链表结点typedef struct node{ int num; struct node *next;}stud;算法如下:#include <malloc.h>typedef struct node{ int num; //数据域 struct node *next; //指针域}stud;stud * create(int n) //创建n个结点{ stud *head,*p1,*p2; //p1指向新结点,p2指向当前结点 head=p1=p2=NULL; for(int =0;i<n;i++) { p1=(stud *)malloc(sizeof(stud)); //创建新结点 p1->num=i; if(i==0) head=p1; else { p2->next=p1; } p2=p1; } p2->next=NULL; //最后一个节点指向NULL return head;}
单链表的查找算法
外部传入一个head指针
typedef struct node{ int num; struct node *next;}stud;stud * find(stud *head,int i){ stud *p1; //遍历的指针 p1=head; while(p1!=NULL) //链表非空 { if(i==p1->num) break; else { p1=p1->next; if(p1==NULL) { printf("cannot find!\n"); return NULL; } } } return p1;}
单链表的删除算法
与查找思路差不多,但要注意head结点和找不到删除节点的情况
bool del(stud *head,int i) //删除成功返回true,失败或未找到返回false{ bool bret=false; if(head) { stud *p1,*p2; p1=head; while(p1->num!=i&&p1->next!=NULL) { p2=p1; p1=p1->next; } if(p1) { if(p1==head) //head结点情况处理方式不同 head=p1->next; else p2->next=p1->next; bret=ture; free(p1); } } return bret;}
单链表的插入算法
前提链表有序stud *insert(stud *head ,stud *p){ stud *p1,*p2; p1=head; if(!head) { head=p; head->next=NULL; } else { while(p->num > p1->num && p1->next!=NULL) { p2=p1; p1=p1->next; } if(p1==head) //注意点 { head=p; p->next=p1; } else { p2->next=p; p->next=p1; } }}
待续。。。
阅读全文
0 0
- 基础学习第二弹
- 深度学习零基础进阶第二弹
- 第二天,Java基础学习
- Java基础学习第二天
- 学习第二天:java基础
- C# 基础学习第二天
- java基础学习第二天
- Java基础学习第二天
- Java基础学习第二天
- 记录基础学习第二天
- java基础学习第二天
- java学习基础第二篇
- java基础学习第二讲
- java基础第二弹~~~
- 学习J2EE第二天(XML基础)
- XSL:XSL基础学习第二部分
- 黑马程序员_C#基础学习第二季
- 黑马程序员-----基础学习第二天
- 数据库事务隔离级ORACLE数据库事务隔离级别介绍
- Android 8.0新特性适配测试报告来啦!
- Java
- angular购物车逻辑代码
- 基于Spring的服务端国际化配置
- 基础学习第二弹
- 初识jQuery
- 缓冲协议才是Python风靡全球的主要原因
- SQL Server中insert/update的高性能写法
- mysql授予用户权限
- Android 模拟器启动失败 解决方案
- git安装
- 汇编test和cmp区别
- pcie的quirk函数的执行优先级