#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. Vue.js实战

    指令 什么是指令 指令,directives,是vue非常常用的功能,在template里. 都是以v-开头 不是自己所为html元素,比如假设指令叫v-abc,没有这种写法,这是组件(compone ...

  2. 页面嵌套时js失效解决方法

    事件:iframe或easyui的dialog嵌套页面时,被嵌套的页面可能js因位置失效; 解决: //动态加载js(根据父级html位置计算) jQuery.getScript("scri ...

  3. 洛谷P1896||bzoj1087 [SCOI2005]互不侵犯

    bzoj1087 洛谷P1896 想了很久,太久没做状压都已经不会了... 状压每一行就好了 #include<cstdio> #include<algorithm> #inc ...

  4. 接口测试03 - Python HTTP库requests

    概述: 整理一些requests的相关知识,及如何使用requests进行接口测试. requests号称:是唯一的一个非转基因的Python HTTP库,人类可以安全享用. 安装: 先看下怎么安装r ...

  5. Unix高级环境编程之fcntl函数

    #include <fcntl.h> int fcntl(int fd, int cmd, ...) fcntl功能 复制一个现有的描述符 (cmd = F_DUPFD) ##### 返回 ...

  6. shell脚本实现自动化备份

    1.备份规则: 在生产环境中有若干服务器需要定时将服务器中应用程序,以及数据库等进行备份.要求在本地服务器中保存近一周的备份,备份服务器中保存最近一月的备份文件.                    ...

  7. Linux 查找bom头文件,清除bom头命令

    1.查找bom头文件 grep -r -I -l $'^\xEF\xBB\xBF' ./ 2.替换bom头文件 find . -type f -exec sed -i 's/\xEF\xBB\xBF/ ...

  8. C++面试中的singleton类

    引子 “请写一个Singleton.”面试官微笑着和我说. “这可真简单.”我心里想着,并在白板上写下了下面的Singleton实现: 1 class Singleton 2 { 3 public: ...

  9. ubuntu键盘映射

    在sublime下开发习惯把CapsLock和Shift间交换,windows下有很多软件可以修改键盘映射,在ubuntu下可以是哦用xmodmap命令,使用方法如下: 在自己用户的home目录下新建 ...

  10. react注意点

    event 对象 和普通浏览器一样,事件监听函数会被自动传入一个 event 对象,这个对象和普通的浏览器 event 对象所包含的方法和属性都基本一致.不同的是 React.js 中的 event  ...