#include <stdio.h>
#include <stdlib.h> //定义节点
typedef struct Node
{
int data;
struct Node * PNext;
}*PNode,Node; //初始化函数
PNode create_list();//创建节点
//打印出链表
void traverse_list(PNode);
//删除节点pos 从1 开始
void delete_node(PNode,int,int *); //插入节点 pos 从1开始
void insert_data(PNode,int ,int );
void main()
{
//int val;
//定义头指针
PNode PHead=NULL;
PHead=create_list(); //delete_node(PHead,-1,&val); insert_data(PHead,-,);
traverse_list(PHead);
} PNode create_list()
{
int len;
int i;
int val;
//定义头节点
PNode PHead=(PNode)malloc(sizeof(Node));
//内存不足等情况会出现分配内存失败的情况 发生错误会返回NULL
if(PHead == NULL){
printf("内存分配失败");
}
PNode Ptail=PHead;
//将头节点的指针域指向NULL 如果没有首节点指针域就是NULL
Ptail->PNext=NULL; /*
思路:
定义节点ptail,永远指向尾节点,一开始只有头结点 头结点也是尾节点,所以指向头结点 将新建的PNew节点挂载到ptail节点后面,挂载好之后,ptail指向新建的PNew节点,这样保证ptail永远指向尾节点
*/
printf("请输入初始化节点的数量\n");
scanf("%d",&len);
for(i=;i<len;i++){
printf("请输入节点的值");
scanf("%d",&val); PNode PNew=(PNode)malloc(sizeof(Node));
PNew->data=val;
Ptail->PNext=PNew;
PNew->PNext=NULL;
Ptail=PNew;
}
//返回首节点
return PHead;
} void traverse_list(PNode PHead)
{
PNode p = PHead->PNext;
//printf("%d\n",PHead->PNext);
if(p == NULL)
{
printf("链表为空\n");
exit();
}
while(p != NULL){
printf("%d\n",p->data);
p=p->PNext;
} } void delete_node(PNode PHead,int pos,int * val)
{ int i=;
if(PHead->PNext==NULL){
printf("节点为空");
exit();
}
if(pos <){
printf("没有数据");
exit();
}
PNode p=PHead;
PNode t;
PNode r;
while(i != pos){
//printf("%d\n",i=t->data);exit(0);
t=p;
if(i == pos-){
//printf("%d\n",i=p->PNext->PNext->data);exit(0);
//exit(0);
r=p->PNext;
t->PNext=p->PNext->PNext;
free(r);
r=NULL;
//exit(0);
return;
}
i++;
p=p->PNext;
}
} void insert_data(PNode PHead,int pos,int val)
{
int i=;
PNode p=PHead;
while(p != NULL && i<pos-){
p=p->PNext;
i++;
}
if(p == NULL || i>pos -){
printf("插入错误");
return ;
} PNode PNew=(PNode)malloc(sizeof(Node));
if(PNew == NULL){
printf("内存分配失败");
exit(-);
}
PNode t=p->PNext;
PNew->data=val;
PNew->PNext=t;
p->PNext=PNew;
}

C语言实现链表及其操作的更多相关文章

  1. C语言之----面向对象的方法实现链表的操作

    1 /* 2 * 详细运行过程: 本程序实现的是对链表的简单的操作,即链表的增 删 改 查 销毁 初始化 3 * 运用面向对象的思想,实现一个类op,op中包括了所有的链表操作方法 4 * 其他的程序 ...

  2. C语言链表全操作(增,删,改,查,逆序,递增排序,递减排序,链式队列,链式栈)

    一,数据结构——链表全操作: 链表形式: 其中,每个节点(Node)是一个结构体,这个结构体包含数据域,指针域,数据域用来存放数据,指针域则用来指向下一个节点: 特别说明:对于单链表,每个节点(Nod ...

  3. C语言提高 (6) 第六天 文件(续) 链表的操作

    1昨日回顾 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include &l ...

  4. C语言实现--静态链表的操作

    1,我们研究数据结构的操作,第一要弄懂它的结构体表示(也就是结构体特点).第二要清楚它的初始化和撤销过程.对于静态链表首先分析它的特点:一是采用静态存储方式,二是没有指针.静态链表就是不用指针来表示链 ...

  5. C语言之链表

    这两天在复习C语言的知识,为了给下个阶段学习OC做准备,以下的代码的编译运行环境是Xcode5.0版本,写篇博文把昨天复习的C语言有关链表的知识给大家分享一下,以下是小菜自己总结的内容,代码也是按照自 ...

  6. C语言单链表实现19个功能完全详解

    谢谢Lee.Kevin分享了这篇文章 最近在复习数据结构,想把数据结构里面涉及的都自己实现一下,完全是用C语言实现的. 自己编写的不是很好,大家可以参考,有错误希望帮忙指正,现在正处于编写阶段,一共将 ...

  7. C语言动态链表数据结构

    链表的操作增删改查 typedef int DATA; struct SNode { DATA data; SNode* pNext; }; SNode* g_head=NULL;//全局变量 //从 ...

  8. C语言样式的文件操作函数

    使用C语言样式的文件操作函数,需要包含stdio.h头文件. 1.打开文件的函数: //oflag的取值为“w”或“r”,分别表示以写或读的方式打开 FILE* fd = fopen(filename ...

  9. Unix/Linux环境C编程入门教程(41) C语言库函数的文件操作详解

     上一篇博客我们讲解了如何使用Linux提供的文件操作函数,本文主要讲解使用C语言提供的文件操作的库函数. 1.函数介绍 fopen(打开文件) 相关函数 open,fclose 表头文件 #in ...

随机推荐

  1. BackgroundWorker的使用一二(可视化编程,开始后台工作,报告进度,取消后台工作等)

    C# 提供了BackgroundWorker功能非常强大,可以将某项工作放到后台运行,可以让后台报告进度,可以取消后台工作...... BackgroundWorker的上述功能是通过 1. 三个主要 ...

  2. Cordova 系列之创建一个iOS项目

    1.打开终端 2.输入命令 $ cd Desktop (PS:Desktop表示放在桌面,你可以选择放任意位置) 3.$  cordova create HelloWorld com.example. ...

  3. 如何利用python制作微信好友头像照片墙?

    这个不难,主要用到itchat和pillow这2个库,其中itchat用于获取微信好友头像照片,pillow用于拼接头像生成一个照片墙,下面我简单介绍一下实现过程,代码量不多,也很好理解,实验环境wi ...

  4. Hexo - CNAME文件在每次部署后就没了

    问题 一般我们会将Hexo博客搭建到Github上,如果在Github上为其配置一个自定义的域名时,会自动在项目仓库根目录下新添加一个CNAME文件.但是这里有个问题,如果将Hexo博客重新部署一遍后 ...

  5. CVE-2017-5638——S2-045

    一. 漏洞简介 Apache Struts是美国阿帕奇(Apache)软件基金会负责维护的一个开源项目,是一套用于创建企业级Java Web 应用的开源MVC框架,主要提供两个版本框架产品: Stru ...

  6. 关于ssh的介绍

    最近看到一篇关于介绍ssh讲得很清晰的文章,这里来记录一下加深一下印象: 基本原理: SSH(Secure Shell)是一套协议标准,可以用来实现两台机器之间的安全登录以及安全的数据传送,其保证数据 ...

  7. H5 之 Page Visibility

    这个是今天刚发现的,想起之前那个在页面用video标签视频播放,别人切换页面后仍在继续播放,体验很不好,用这个API就可以很完美的解决. Page Visibility API 可以让你获取到这种状态 ...

  8. wordpress注册收不到邮件

    解决发送问题后又遇到个蛋疼的问题,点击激活邮件地址提示您的密码重设链接无效,请在下方请求新链接发现原来是显的没事的wordpress在激活链接前后都加了<>,而邮箱把后面的>当成是链 ...

  9. YDKJ 读书笔记 01 Function vs. Block Scope

    Introduction 本系列文章为You Don't Know JS的读书笔记. 书籍地址:https://github.com/getify/You-Dont-Know-JS Scope Fro ...

  10. Java之final、static关键字及匿名对象

    个人通俗理解: 1.final:首先被final修饰的变量就自动变成的不能被修改的常量了.被修饰的类会自动变成太监类,只能有父类,不能有子类:被修饰的方法也不能被子类重写了:被修饰的引用变量值也不能更 ...