线性表的C语言实现
来源:互联网 发布:撮合交易平台源码 编辑:程序博客网 时间:2024/05/16 14:38
函数声明头文件:function.h
#define true 1#define false 0/* 定义链表的数据类型为int型 */typedef int datatype;/*线性表的单链表存储结构*/typedef struct l_node{ /*声明数据域*/ datatype data; /*声明指针域*/ struct l_node *next;}l_node, *link_list;/* 判断第i个元素是否存在 * 若存在,把该元素的值赋给*e,并返回true * 若不存在,返回false * 参数HEAD为单链表的头指针*/int get_elem(link_list HEAD, int i, datatype *e);/* 在带头结点的单链线性表HEAD中,在第i个位置之前插入元素e * 参数HEAD是单链表的头指针*/int list_insert_posision(link_list HEAD, int i,datatype e);/* 在带头结点的单链线性表HEAD中,删除第i个元素,并由e返回其值 * 参数HEAD是单链表的头指针头指针*/int list_delete_position(link_list HEAD, int i, datatype *e);/* 创建新的链表,并插入输入的n个元素(插入元素的位置为1) * 参数HEAD为链表的头指针 * 参数n为插入元素的个数*/void create_list(link_list HEAD, int n);/* 将两个链表并为一个有序链表 * 参数HEAD_A为链表A的头指针(元素按非递减排列) * 参数HEAD_B为链表B的头指针(元素按非递减排列) * 参数HEAD_C为合成链的头指针*/void merge_list(link_list HEAD_A, link_list HEAD_B, link_list HEAD_C);/* 若链表为空,返回true,否则返回false * 参数HEAD为链表的头指针*/int list_empty(link_list HEAD);/* 获取链表的长度 */int list_length(link_list HEAD);/*在表中查找第k个元素,若找到,返回该元素的指针 * 否则返回空指针NULL * 参数HEAD为单链表的头指针*/link_list list_locate(link_list HEAD, int k);/* 遍历单链表 */void list_print(link_list HEAD);/* 在表中查找第一个值为k的结点 * 若找到返回位置索引(从1开始) * 否则,返回0*/int list_locate_pos(link_list HEAD, datatype k);/* 销毁链表 */void list_destory(link_list HEAD);
函数实现文件:implementation.c
#include<stdio.h>#include<stdlib.h>#include"function.h"int get_elem(link_list HEAD, int i, datatype *e){ /* 初始化第一个结点 */ link_list p = NULL; p = HEAD -> next; /* 计数器 */ int j = 1; /* 指针向后查找,直到p指向第i个元素或者p为空 */ while(p && j < i ) { p = p -> next; j += 1; } /* 若L为空 或 j > i,说明不存在*/ if (!p || j > i) { return false; } /* 否则说明找到第i个元素 */ *e = p -> data; return true;}int list_insert_posision(link_list HEAD,int i, datatype e){ /* 单链表的第一个结点 */ link_list p = NULL; p = HEAD; /* 初始化计数器 */ int j = 0; /* 指针向后查找,直到指针指向第(i-1)个元素或者p为空 */ while( p && (j < i - 1) ) { p = p -> next; j += 1; } /* 若i小于1或者i大于链表的changdu */ if ( !p || (j > i - 1) ) { return false; } /* 插入元素 */ /* 生成新结点 */ link_list new_node = (link_list) malloc(sizeof(l_node)); new_node -> data = e; /* 改变指针域 */ new_node -> next = p -> next; p -> next = new_node; return true;}int list_delete_position(link_list HEAD, int i, datatype *e){ /* 初始化第一个结点p */ link_list p = NULL; p = HEAD; /* 计数器 */ int j = 0; /* 指针向后查找,直到指针指向第(i-1)个元素或者p为空 */ while( p -> next && j < i - 1) { p = p -> next; j += 1; } /* 若i小于1或者i大于链表的长度 */ if ( !(p -> next) || j > i - 1 ) { return false; } /* 返回其值 */ *e = p -> next -> data; /* 删除结点 */ link_list q = p -> next; p -> next = q -> next; free(q); return true;}void create_list(link_list HEAD, int n){ int i = 0; /* 初始化头指针 */ HEAD -> next = NULL; for (i = 0; i < n; i++) { /* 新建结点 */ link_list p = (link_list) malloc(sizeof(l_node)); /* 输入结点值 */ scanf("%d",&(p -> data)); /* 改变指针域 */ p -> next = HEAD -> next; HEAD -> next = p; }}void merge_list(link_list HEAD_A, link_list HEAD_B, link_list HEAD_C){ /* 用L_A的头结点作为合成链表L_C的头结点 */ HEAD_C = HEAD_A; link_list pa, pb, pc; pa = HEAD_A -> next; pb = HEAD_B -> next; /* pc为合成链的尾指针 */ pc = HEAD_C; while(pa && pb) { if(pa -> data <= pb -> data) { pc -> next = pa; pc = pa; pa = pa -> next; } else { pc -> next = pb; pc = pb; pb = pb -> next; } } /* 插入剩余段 */ pc -> next = pa?pa:pb; /* 释放链表B的根节点 */ free(HEAD_B);} int list_empty(link_list HEAD){ if (HEAD -> next == NULL) return true; else return false;}int list_length(link_list HEAD){ /* 计数器 */ int count = 0; link_list p = HEAD -> next; while(p) { count += 1; p = p -> next; } return count;}link_list list_locate(link_list HEAD, int k){ /* 单链表的第一个结点 */ link_list p = HEAD -> next; /* 计数器 */ int i = 1; while(p && i < k) { p = p -> next; i += 1; } /* 存在第k个元素,且指针p指向该元素 */ if (p && i == k) { return p; } return NULL;}void list_print(link_list HEAD){ printf("打印单链表\n"); link_list p = HEAD -> next; while(p) { printf("%d\n", p -> data); p = p -> next; }}int list_locate_pos(link_list HEAD, datatype k){ /* 指针p指向链表的第一个结点 */ link_list p = HEAD -> next; /* 计数器 */ int i = 1; while(p) { if(p -> data == k) return i; p = p -> next; i += 1; } return 0;}void list_destory(link_list HEAD){ while(HEAD) { link_list p = HEAD; HEAD = HEAD -> next; free(p); }}
0 0
- 线性表的顺序实现(C语言)
- 线性表的顺序实现(c语言)
- 线性表的C语言实现
- C语言线性表的实现
- 线性表的C语言实现
- 线性表基本功能的c语言实现
- 线性链表的c语言实现
- C语言中线性表的实现
- 线性表的实现(C语言)
- C语言实现线性表
- 线性表 C语言实现
- c语言实现线性表
- 数据结构 C语言实现 线性表的链式实现
- 线性表的顺序存储结构的c语言实现
- C语言--线性表的顺序存储的实现
- C语言固定大小的线性表的简单实现
- 数据结构之---c语言实现线性表的顺序表
- 线性表的顺序表示(C语言实现)
- ORA-06511: PL/SQL: cursor already open
- Scala入门之OOP
- Hibernate 注解注册
- 标准Web系统的架构分层
- NSOperation 和 GCD 的区别
- 线性表的C语言实现
- 拦截器利用装饰类的对getParameter()和getParameterValues()方法的重写对中文编码的转换
- Deep Residual Network实验复现
- 关于tomcat 8080端口被占用
- jsp指令
- a++ + ++a
- android设计模式系列之组合模式
- 数据库表创建注意事项
- 2016多校训练Contest6: 1007 This world need more Zhu hdu5799