您的位置:首页 > 其它

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

2014-04-04 00:00 811 查看
摘要: 自写链表小练习-》单向链表小练习--》创建链表头,添加删除链表节点,释放链表内存,选择插入数据

/*************************************************************************
> 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
*******************************
3ff8
*****************************************/
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐