数据结构基础(3)---C语言实现单链表
#include<stdio.h>
#include<malloc.h>
#include<stdbool.h>
/**
**链表节点的定义
*/
typedef struct Node{
int data;//数据域
struct Node * PNext;//指针域,存放下一个节点的地址
} Node ,* PNode ;
/**
**创建链表
*/
PNode create_list()
{
int len,i;
printf("请输入链表的长度:len=\n");
scanf("%d",&len);
PNode PHead=malloc(sizeof(Node));
PHead->PNext=NULL;
PNode PTail=PHead;//PTail是永远指向尾节点的指针
for(i=0;i<len;i++)
{
int val;
printf("请输入第 %d 个元素的值:", i+1);
scanf("%d",&val);
PNode PNew=malloc(sizeof(Node));
PNew->data=val;
PNew->PNext=NULL;
PTail->PNext=PNew;
PTail=PNew;
}
return PHead; } /**
**对链表进行遍历
*/
void traverse(PNode pHead)
{
PNode p=pHead->PNext;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->PNext;
}
printf("\n");
}
/**
*推断链表是否为空
*/ bool isempty(PNode pHead)
{
if(NULL==pHead->PNext)
{
return true;
}else{
return false;
}
} /**
**获取链表的长度
*/
int list_num (PNode pHead)
{
int num=0;
PNode p=pHead->PNext;
while(p!=NULL)
{
num++;
p=p->PNext;
}
return num;
} /**
*向链表中插入元素
*/
bool insert_list(PNode pHead,int val ,int pos){
//须要找到第pos个位置。而且须要推断这个位置pos是否合法
//i是p所指节点的位置,所以从一開始。为什么要pos-1呢,由于用的是while 当i=pos-1时跳出循环
int i=0;
PNode p=pHead;
while(NULL!=p&&i<pos-1)
{
i++;
p=p->PNext;
}
//假设插入位置过大,那么P=NULL,
//假设插入的位置是0或者负数,那么i>pos-1
if(i>pos-1||NULL==p)
{
printf("插入位置不合法\n");
return false;
}
PNode PNew=malloc(sizeof(PNode));
PNew->data=val;
PNode temp=p->PNext;
p->PNext=PNew;
PNew->PNext=temp;
return true;
} /**
**在链表中删除节点
*/
delete (PNode PHead,int pos , int * pval)
{
int i=0;
PNode p=PHead;
//我们要删除p后面的节点,所以p不能指向最后一个节点 p->next!=NULL
while(p->PNext!=NULL&&i<pos-1){ p=p->PNext;
i++;
}
if(i>pos-1||p->PNext==NULL)
{
printf("删除位置不合法\n");
return false;
}
PNode temp=p->PNext;
p->PNext=temp->PNext;
free(temp); }
int main()
{ PNode PHead= create_list();
if(isempty(PHead))
printf("链表为空\n");
printf("链表的长度为:%d\n",list_num(PHead));
traverse(PHead);
//insert_list(PHead,55,1);
int val;
delete(PHead,6,&val);
traverse(PHead);
return 0;
}
数据结构基础(3)---C语言实现单链表的更多相关文章
- C/C++语言实现单链表(带头结点)
彻底理解链表中为何使用二级指针或者一级指针的引用 数据结构之链表-链表实现及常用操作(C++篇) C语言实现单链表,主要功能为空链表创建,链表初始化(头插法),链表元素读取,按位置插入,(有序链表)按 ...
- C语言实现单链表-03版
在C语言实现单链表-02版中我们只是简单的更新一下链表的组织方式: 它没有更多的更新功能,因此我们这个版本将要完成如下功能: Problem 1,搜索相关节点: 2,前插节点: 3,后追加节点: 4, ...
- C语言实现单链表-02版
我们在C语言实现单链表-01版中实现的链表非常简单: 但是它对于理解单链表是非常有帮助的,至少我就是这样认为的: 简单的不能再简单的东西没那么实用,所以我们接下来要大规模的修改啦: Problem 1 ...
- C语言实现单链表,并完成链表常用API函数
C语言实现单链表,并完成链表常用API函数: 1.链表增.删.改.查. 2.打印链表.反转打印.打印环形链表. 3.链表排序.链表冒泡排序.链表快速排序. 4.求链表节点个数(普通方法.递归方法). ...
- C语言实现单链表节点的删除(带头结点)
我在之前一篇博客<C语言实现单链表节点的删除(不带头结点)>中具体实现了怎样在一个不带头结点的单链表的删除一个节点,在这一篇博客中我改成了带头结点的单链表.代码演示样例上传至 https: ...
- 数据结构C语言版--单链表的基本功能实现
/* * 构造一个链式存储的线性表(当输入9999时,结束构造过程),然后输出该线性表 * 并统计该线性链表的长度 . *注:new和delete是C++的运算符 malloc和free是C++/C的 ...
- 「C语言」单链表/双向链表的建立/遍历/插入/删除
最近临近期末的C语言课程设计比平时练习作业一下难了不止一个档次,第一次接触到了C语言的框架开发,了解了View(界面层).Service(业务逻辑层).Persistence(持久化层)的分离和耦合, ...
- 【线性表基础】顺序表和单链表的插入、删除等基本操作【Java版】
本文表述了线性表及其基本操作的代码[Java实现] 参考书籍 :<数据结构 --Java语言描述>/刘小晶 ,杜选主编 线性表需要的基本功能有:动态地增长或收缩:对线性表的任何数据元素进行 ...
- C语言实现单链表
大二学习数据结构和算法啦,因为之前用Java语言实现过,所以理解起来还是比较轻松,就是理解指针与结构体的运用.废话不多说,上代码! 初始化 typedef struct Node { int data ...
- C语言实现单链表-01版
单链表的应用非常广,它可以实现栈,队列等: Problem 我对学习任何东西都希望能找到尽可能简单的例子,而不是看起来好高大上的: 对链表这样简答的数据结构,有些书也是写得太过“完美”啦: 初学者很难 ...
随机推荐
- cygwin下调用make出现的奇怪现象
<lenovo@root 11:48:03> /cygdrive/d/liuhang/GitHub/rpi_linux/linux$make help 1 [main] make 4472 ...
- head---显示文件的开头的内容
head命令用于显示文件的开头的内容.在默认情况下,head命令显示文件的头10行内容. 语法 head(选项)(参数) 选项 -n<数字>:指定显示头部内容的行数: -c<字符数& ...
- Could not create connection to database server. Attempted reconnect 3 times. Giving up.错误
项目是基于springboot框架,昨天从git上pull代码之后也没有具体看更改的地方,结果运行的时候就报错了. java.sql.SQLNonTransientConnectionExceptio ...
- php如何openssl_encrypt加密解密
最近在对接客户的CRM系统,获取令牌时,要用DES方式加密解密,由于之前没有搞错这种加密方式,经过请教了"百度"和"谷歌"两个老师后,结合了多篇文档内容后,终于 ...
- 每天一个linux命令(九月)
2014-09-02 top 实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器 命令參数: -b 批处理 -c 显示完整的治命令 -I 忽略失效过程 -s 保密模式 -S 累积模 ...
- HDU 4183Pahom on Water(网络流之最大流)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4183 这题题目意思非常难看懂..我看了好长时间也没看懂..终于是从网上找的翻译. .我就在这翻译一下吧 ...
- vim 基础学习之文件跳转
1. ''-当前文件上次跳转之前的位置2. '.-当前文件上次修改的位置,只要是发生了可能导致变化的命令操作就会被标记,哪怕实际结果没有变化3. '^-当前文件上次插入的位置,只要是发生了插入操作命令 ...
- mybatis:开发环境搭建--增删改查--多表联合查询(多对一)
什么是mybatisMyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis使用简单的XML或 ...
- Linux下通过.desktop 文件创建桌面程序图标及文件编写方式(Desktop Entry文件概述)
Linux下通过.desktop 文件创建桌面程序图标及文件编写方式 1.Desktop Entry文件概述:在 Windows 平台上,用户可以通过点击位于桌面或菜单上的快捷方式轻松打开目标应用程序 ...
- 如何在Centos官网下载所需版本的Centos——靠谱的Centos下载教程
很多小伙伴不知道对应版本的Centos怎么下载,最近小编整理了一份Centos详细的下载教程,希望小伙伴们不在为下不到对应版本的Centos而苦恼. 1.进入Centos官网:https://www. ...