数据结构基础(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 我对学习任何东西都希望能找到尽可能简单的例子,而不是看起来好高大上的: 对链表这样简答的数据结构,有些书也是写得太过“完美”啦: 初学者很难 ...
随机推荐
- Linux 中常用的基础命令一
1.目录相关命令的使用 pwd(printing working directory) 显示当前工作目录 pwd命令相关的环境变量: PWD 保存了当前工作目录路径 OLDP ...
- shell单引号屏蔽变量方法
[goforit ~]$ name="玖零後大叔" [goforit~]$ echo $name 玖零後大叔 [goforit ~]$ echo "$name" ...
- Unity shader 代码高亮+提示
Shader Unity Support This is Unity CG Shaders Support. It has code completion support and uses C/C++ ...
- 【uva 1025】A Spy in the Metro
[题目链接]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
- 洛谷 P1703 那个什么密码2
P1703 那个什么密码2 题目背景 https://www.luogu.org/problem/show?pid=1079 题目描述 与原题一模一样.具体不同请见输入格式 输入输出格式 输入格式: ...
- JAVA 不同类载入器命名空间的理解
曾经一直有这样一个疑惑: 都说在JAVA中,由不同类载入器载入的类在虚拟机中位于不同的命名空间下,不同命名空间下的类相互不可见. 这让我产生了一个迷惑:假设有一个类A使用了ja ...
- 美团实习生电面之谈(成功拿到offer)
3月底进行了美团的一次实习生面试(Java研发project师).当时顺利的通过一面.以下是我的一面: 1.CPU由哪些部分组成 2.线程和进程的差别 3.Java类载入机制 4.怎样实现一个字符串的 ...
- Android中App可分配内存的大小
现在真实测试结果: 1,为了搞清楚每个应用程序在Android系统中最多可分配多少内存空间,我们使用了真机进行测试,测试机型为魅族MX4 Pro,3G内存. 测试方法是直接申请一块较大的内存空间,看应 ...
- node.js操作Cookie
node.js操作Cookie http://www.tuicool.com/articles/F3UF7n
- Hue的三大特点、三大功能和架构
不多说,直接上干货! Hue 是 Cloudera 的大数据 Web 工具 官方访问网站 : http://gethue.com/ GitHub : https://github.com/cloude ...