单向链表小练习--》创建链表头,添加删除链表节点,释放链表内存,选择插入数据
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; }
相关文章推荐
- C语言单向链表的创建、释放、插入、删除、翻转操作练习
- 链表:创建、清空、插入、添加、删除节点
- 很简单的数据结构:链表线性存储的创建、取数据、数据添加、数据插入、数据删除
- 树的基本结构,以及利用链表实现树的各项操作(创建、添加/删除/打印树节点、销毁等等)
- 单向链表--初始化、添加删除节点、排序链表
- 创建单向动态链表、插入链表、删除链表
- 链表的创建、遍历、节点的插入、节点的删除
- 链表操作-创建、输出、删除,添加节点
- (C语言版)链表(二)——实现单向循环链表创建、插入、删除、释放内存等简单操作
- 单向链表的创建、节点删除、链表输出、翻转(写法参考计蒜客数据结构课程)
- c++之链表篇1:单向链表的创建,打印,删除,插入,销毁等基本操作
- 数据结构(第二天)单链表的基本操作,创建单链表,头插法,尾插法,删除节点,查询节点
- 数据结构:单链表(二)之链表节点排序,升序插入数据,删除指定的所有节点,翻转链表操作
- 单向链表的相关操作(创建,遍历,插入,删除,逆置)
- 链表之节点插入、查找删除、遍历打印、遍历释放
- golang基础-结构体、结构体链表前后插入、节点添加删除
- 单链表创建,删除节点,添加节点,排序
- javascript 原生方法对dom节点的操作,创建、添加、删除、替换、插入、复制、移动等操作
- 单向链表创建、插入、删除
- (C语言版)链表(一)——实现单向链表创建、插入、删除等简单操作(包含个人理解说明及注释,新手跟着写代码)