文档章节

单向链表小练习--》创建链表头,添加删除链表节点,释放链表内存,选择插入数据

Palmer神经质
 Palmer神经质
发布于 2014/04/04 16:39
字数 644
阅读 264
收藏 2
/*************************************************************************
    > File Name: single.h
    > Author: Palmer XU
    > Mail: Palmer.Xu.One@Gmail.com 
    > Created Time: Thu 03 Apr 2014 11:38:06 PM EDT
 ************************************************************************/
#ifndef __SINGLE_H__
#define __SINGLE_H__
#include<stdio.h>
typedef struct node
{
 int data;
 struct node *next;
}node_t,*pnode_t;
pnode_t creat_list();//创建链表头
pnode_t creat_node(int);//创建节点
int insert_after_all(pnode_t,int);//在链表最后插入节点
int insert_after(pnode_t,int);//在指定节点后插入节点
int print_all(pnode_t);//打印出所有节点
int delete_node(pnode_t,int);//删除对应数据节点
int delete_after(pnode_t);//删除指定节点后面的节点
int destory_after(pnode_t);//释放指定节点后面的所有节点
pnode_t destory_all(pnode_t);//释放链表
pnode_t find_node(pnode_t,int);//找到指定节点地址
//int trans_list(p);
int insert_sort_after(pnode_t,int);//放置节点小练习
#endif
/*************************************************************************
    > File Name: single.c
    > Author: Palmer XU
    > Mail: Palmer.Xu.One@Gmail.com 
    > Created Time: Fri 04 Apr 2014 03:07:20 AM EDT
 ************************************************************************/
#include<stdio.h>
#include"single.h"
int main(void)
{
 pnode_t p = creat_list();
 //int i;
 insert_after_all(p,1);
 print_all(p);
 insert_after_all(p,2);
 insert_after_all(p,3);
 insert_after_all(p,4);
 insert_after_all(p,5);
 insert_after_all(p,6);
 insert_after_all(p,7);
 insert_after_all(p,8);
 print_all(p);
 pnode_t p_temp = find_node(p,3);
 insert_after(p_temp,9);
 print_all(p);
 
 delete_node(p,100);
 print_all(p);
 
 insert_sort_after(p,8);
 
 
 print_all(p);
 
 p = destory_all(p);
 printf("%p",p);
 
 return 0;
}
/*************************************************************************
    > File Name: single_fun.c
    > Author: Palmer XU
    > Mail: Palmer.Xu.One@Gmail.com 
    > Created Time: Fri 04 Apr 2014 02:07:09 AM EDT
 ************************************************************************/
#include<stdlib.h>
#include<stdio.h>
#include"single.h"
 
pnode_t creat_list()
{
 pnode_t p = (pnode_t)malloc(sizeof(node_t));
 
 p->data = -9999999;
 p->next = NULL;
 
 return p;
}
 
pnode_t creat_node(int data)
{
 pnode_t p = (pnode_t)malloc(sizeof(node_t));
 
 p->data = data;
 p->next = NULL;
 return p;
}
 
int insert_after_all(pnode_t p,int n_p)
{
 if(NULL == p)
 {
  printf("error\n");
  return -1;
 }
 while(NULL != p->next)
  p = p->next;
 p->next= creat_node(n_p);
 return 0;
}
 
int insert_after(pnode_t p,int n_p)
{
 
 if(NULL == p)
 {
  printf("error\n");
  return -1;
 }
 pnode_t p_temp;
 p_temp = creat_node(n_p);
 p_temp->next = p->next;
 p->next = p_temp;
 return 0;
}
 
int print_all(pnode_t p)
{ 
 if(NULL == p)
 {
  printf("error\n");
  return -1;
 }
 while(NULL != (p = p->next))
  printf("%d\t",p->data);
 printf("\n");
 return 0;
}
 
int delete_after(pnode_t p)
{
 if(NULL == p || NULL == p->next )
 {
  printf("error\n");
  return -1;
 }
 pnode_t p_temp = p->next;
 p->next = p->next->next;
 free(p_temp);
 return 0;
}
 
int delete_node(pnode_t p, int data)
{
 if(NULL == p)
 {
  printf("error\n");
  return -1;
 }
#if 1
 while(NULL != p->next && data != p->next->data)
 {
  p = p->next;
 }
#endif
 
 if(NULL != p->next && -1 != delete_after(p))
   return 0;
 printf("error\n");
 return -1;
}
 
pnode_t destory_all(pnode_t p)
{
 if(NULL == p)
 {
  printf("error\n");
  return NULL;
 }
 pnode_t p_temp;
 
 while(NULL != (p_temp = p))
 {
  p = p->next;
  free(p_temp);
 }
 return NULL;
}
int destory_after(pnode_t p)
{ 
 if(NULL == p)
 {
  printf("error\n");
  return 0;
 }
 destory_all(p->next);
 p->next = NULL;
 return 0;
}
pnode_t find_node(pnode_t p,int n_p)
{ 
 if(NULL == p)
 {
  printf("error\n");
  return NULL;
 }
 while(NULL != (p = p->next) && p->data != n_p);
 return p;
}
int insert_sort_after(pnode_t p,int data)
{ 
 if(NULL == p)
 {
  printf("error\n");
  return -1;
 }
 while(p->next->data < data)
 {
  if(NULL == p->next->next)
  {
   if(-1 == insert_after(p->next,data))
    return -1;
  }
  p = p->next;
 }
 if(-1 == insert_after(p,data))
  return -1;
 return 0;
}

© 著作权归作者所有

Palmer神经质
粉丝 0
博文 9
码字总数 3660
作品 0
杭州
程序员
私信 提问
数据结构与算法--链表(单向链表)

为什么需要链表 顺序表的构建需要预先知道数据大小来申请连续的存储空间,而在进行扩充时又需要进行数据的搬迁,所以使用起来并不是很灵活。 链表结构可以充分利用计算机内存空间,实现灵活的...

墨痕hz
2018/05/28
0
0
13-数据结构探险系列-线性表篇

数据结构探险之线性表篇 将要学到得, 线性表(链表) 整体的路线图如上图所示,线性表要比队列和栈编码上难一点,起到承前启后的作用。 什么是线性表? 线性表是n个数据元素的有限序列,如下...

天涯明月笙
2018/07/27
0
0
数据结构-02-链表(Linkied List)

Linked List - 链表 链表是线性表的一种。线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元...

Corwien
2016/06/17
32
0
【从蛋壳到满天飞】JS 数据结构解析和算法实现-链表

前言 【从蛋壳到满天飞】JS 数据结构解析和算法实现,全部文章大概的内容如下: Arrays(数组)、Stacks(栈)、Queues(队列)、LinkedList(链表)、Recursion(递归思想)、BinarySearchTree(二分搜...

哎哟迪奥
03/23
0
0
数据结构篇之链表1-链表的概念

近期为了面试做准备,复习了下关于链表的一些知识点,做个记录~ 首先何谓链表? 链式存储的线性表,简称链表。链表由多个链表元素组成,这些元素称为节点。结点之间通过逻辑连接,形成链式存...

青雨001
2018/11/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
2.4K
15
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
41
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
40
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
61
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部