#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. wow.js零基础使用介绍

    wow.js依赖于animate.css,首先需要在 head内引入animate.css或者animate.min.css wow.js或者wow.min.js,然后js文件里再写一行代码. 然后在 ...

  2. Linux 根据进程ID查看文件路径(转)

    遇到的问题是想要查看进程的启动脚本在哪里,比如自己写的weblogic启动脚本,但忘记放在哪里了,这时候可以用以下方式 1.用ps -ef |grep xxxxx 得到该进程的pid 2.输入ls - ...

  3. 升级log4j到log4j2报错:cannot access org.apache.http.annotation.NotThreadSafe

    问题与分析 今天把项目的log4j的依赖改成了log4j2的依赖后,发现使用Maven打包时报错如下: [ERROR] Failed to execute goal org.apache.maven. ...

  4. 基于http的软件仓库

    这是企业中常用的方法 比如一台服务器准备好了,公司必然要安装一些应用 这时可以用这种方法批量安装应用 运行一条命令,服务器就会自己去连接软件仓库,去下载来安装. [root@webmaster htm ...

  5. scrapy分布式原理

    scrapy分布式原理   关于Scrapy工作流程回顾 Scrapy单机架构 上图的架构其实就是一种单机架构,只在本机维护一个爬取队列,Scheduler进行调度,而要实现多态服务器共同爬取数据关键 ...

  6. [UOJ22]外星人

    题解 首先可以发现有效果的\(a_i\)大小一定是递减的,而且一定小于等于当前值 所以我们可以从大到小考虑每个\(a_i\),当确定了一个有效果的\(a_i\)时,\((a_i,x]\)的数都可以随意 ...

  7. HDU1087(树状数组求LIS)

    题是水题,学习一下用树状数组求LIS. 先离散化一下,注意去重:然后就把a[i]作为下标,dp[i]作为值,max作为维护的运算插进树状数组即可. 如果是上升子序列,询问(a[i] - 1):如果是不 ...

  8. 实现一个redis连接池

    #*****************jedis连接参数设置*********************#redis服务器ipredis.ip=169.254.130.122#redis服务器端口号red ...

  9. jQuery测试及解析

    解析:下标从0开始 解析:最大119  解析:鼠标移过mouseover  解析:  var   变量值=变量名

  10. 状态模式和php实现

    状态模式: 允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类.其别名为状态对象(Objects for States),状态模式是一种对象行为型模式. 模式分析: 在很多情况下, ...