数据结构C线性表现实
linearList.h
#ifndef _INC_STDIO_8787
#define _INC_STDIO_8787
#include <stdio.h>
#include <malloc.h>
#define LIST_INIT_SIZE 100 // 线性表存储空间的初始分配量
#define LIST_INCREMENT 10 // 线性表存储空间的分配增量
typedef int ElemType; // 数据元素的类型
typedef struct {
ElemType *elem; // 存储空间的集地址
int length; // 当前线性表的长度
int listsize; // 当前分配的存储容量
} LinearList;
int init_list(LinearList *list); //初始化线性表
void clear_list(LinearList *list);
void destroy_list(LinearList* list);
int list_empty(LinearList* list);
int list_length(LinearList* list);
void print_list(LinearList* list);
int locate_elem(LinearList* list, ElemType* x);
int prior_elem(LinearList* list, ElemType* cur_elem, ElemType* pre_elem);
int get_elem(LinearList* list, int index, ElemType* e);
int next_elem(LinearList* list, ElemType* cur_elem, ElemType* next_elem);
int insert_elem(LinearList* list, int index, ElemType* e);
int delete_elem(LinearList* list, int index, ElemType* e);
int append_elem(LinearList* list,ElemType* e);
int pop_elem(LinearList* list, ElemType* e);
void union_list(LinearList* list_a, LinearList* list_b, LinearList* list_c);
void intersect_list(LinearList* list_a, LinearList* list_b, LinearList* list_c);
void except_list(LinearList* list_a,LinearList* list_b, LinearList* list_c);
#endif
linearList.c
#include "linearList.h"
int init_list(LinearList *list)
{
list->elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if (!list->elem)
{
;
}
list->length = ;
list->listsize = LIST_INIT_SIZE;
;
}
void clear_list(LinearList *list)
{
list->length = ;
}
void destroy_list(LinearList* list)
{
free(list);
}
int list_empty(LinearList* list)
{
);
}
int list_length(LinearList* list)
{
return list->length;
}
int locate_elem(LinearList* list, ElemType* x)
{
;
int i;
; i < list->length; i++)
{
if (list->elem[i] == *x)
{
pos = i;
}
}
return pos;
}
int prior_elem(LinearList* list, ElemType* cur_elem, ElemType* pre_elem)
{
;
pos = locate_elem(list, cur_elem);
)
{
;
}
*pre_elem = list->elem[pos-];
;
}
int insert_elem(LinearList* list, int index, ElemType* e)
{
ElemType *q, *p;
|| index >= list->length)
{
;
}
if (list->length >= list->listsize)
{
ElemType *newbase = (ElemType*)realloc(list->elem, (list->listsize + LIST_INCREMENT)*sizeof(ElemType));
if (!newbase)
{
;
}
list->elem = newbase;
list->listsize += LIST_INCREMENT;
}
q = &(list->elem[index]);
]); p >= q; p--)
{
*(p+) = *p;
}
*q = *e;
++list->length;
;
}
int append_elem(LinearList* list,ElemType* e)
{
if (list->length >= list->listsize)
{
ElemType *newbase = (ElemType*)realloc(list->elem, (list->listsize + LIST_INCREMENT)*sizeof(int));
if (!newbase)
{
;
}
list->elem = newbase;
list->listsize += LIST_INCREMENT;
}
list->elem[list->length] = *e;
++list->length;
;
}
void print_list(LinearList* list){
int i;
; i < list->length; i++){
printf("%d \n", list->elem[i]);
}
}
int get_elem(LinearList* list, int index, ElemType* e){
|| index >= list->length) ;
*e = list->elem[index];
;
}
int next_elem(LinearList* list, ElemType* cur_elem, ElemType* next_elem){
;
pos = locate_elem(list, cur_elem);
|| pos == (list->length - )) ;
*next_elem = list->elem[pos+];
;
}
int delete_elem(LinearList* list, int index, ElemType* e)
{
ElemType *q, *p;
|| index >= list->length)
{
;
}
p = &(list->elem[index]);
*e = *p;
q = list->elem + list->length -;
for (++p; p < q; ++p)
{
*(p - ) = *p;
}
--list->length;
;
}
int pop_elem(LinearList* list, ElemType* e){
;
*e = list->elem[list->length - ];
--list->length;
;
}
void union_list(LinearList* list_a, LinearList* list_b, LinearList* list_c){ //并集,C=A∪B
int i,a_length,b_length;
ElemType elem;
a_length = list_length(list_a);
b_length = list_length(list_b);
;i<a_length;i++){
get_elem(list_a, i, &elem);
append_elem(list_c,&elem);
}
;i<b_length;i++){
get_elem(list_b, i, &elem);
){
append_elem(list_c,&elem);
}
}
}
void intersect_list(LinearList* list_a, LinearList* list_b, LinearList* list_c){ //交集,C=A∩B
int i,a_length;
ElemType elem;
a_length = list_length(list_a);
;i<a_length;i++){
get_elem(list_a, i, &elem);
){
append_elem(list_c,&elem);
}
}
}
void except_list(LinearList* list_a,LinearList* list_b, LinearList* list_c){ //差集,C=A-B(属于A而不属于B)
int i,a_length;
ElemType elem;
a_length = list_length(list_a);
;i<a_length;i++){
get_elem(list_a, i, &elem);
){
append_elem(list_c,&elem);
}
}
}
index.c
#include "linearList.h"
void main() {
int i;
ElemType elem;
LinearList *list_a = (LinearList *)malloc(sizeof(LinearList));
LinearList *list_b = (LinearList *)malloc(sizeof(LinearList));
LinearList *list_c = (LinearList *)malloc(sizeof(LinearList));
init_list(list_a);
init_list(list_b);
init_list(list_c);
; i < ; i++){
append_elem(list_a,&i);
}
; i < ; i+=){
append_elem(list_b,&i);
}
print_list(list_a);
print_list(list_b);
pop_elem(list_a, &elem);
print_list(list_a);
printf("pop: %d \n",elem);
delete_elem(list_a, , &elem);
print_list(list_a);
printf("delete: %d \n",elem);
insert_elem(list_a, , &elem);
printf("insert: %d \n",elem);
print_list(list_a);
get_elem(list_a, , &elem);
printf("get elem at 5: %d \n",elem);
printf("locate : elem %d at %d \n",elem,locate_elem(list_a,&elem));
printf("list_a length : %d \n",list_length(list_a));
print_list(list_a);
print_list(list_b);
union_list(list_a,list_b,list_c);
print_list(list_c);
clear_list(list_c);
intersect_list(list_a,list_b,list_c);
print_list(list_c);
clear_list(list_c);
except_list(list_a,list_b,list_c);
print_list(list_c);
destroy_list(list_a);
destroy_list(list_b);
destroy_list(list_c);
}
数据结构C线性表现实的更多相关文章
- 用C#学习数据结构之线性表
什么是线性表 线性表是最简单.最基本.最常用的数据结构.线性表是线性结构的抽象(Abstract),线性结构的特点是结构中的数据元素之间存在一对一的线性关系.这种一对一的关系指的是数据元素之间的位置关 ...
- 数据结构之线性表(python版)
数据结构之线性表(python版) 单链表 1.1 定义表节点 # 定义表节点 class LNode(): def __init__(self,elem,next = None): self.el ...
- C语言数据结构-顺序线性表的实现-初始化、销毁、长度、查找、前驱、后继、插入、删除、显示操作
1.数据结构-顺序线性表的实现-C语言 #define MAXSIZE 100 //结构体定义 typedef struct { int *elem; //基地址 int length; //结构体当 ...
- 【PHP数据结构】线性表?顺序表?链表?别再傻傻分不清楚
遵从所有教材以及各类数据结构相关的书书籍,我们先从线性表开始入门.今天这篇文章更偏概念,是关于有线性表的一个知识点的汇总. 上文说过,物理结构是用于确定数据以何种方式存储的.其他的数据结构(树.图). ...
- javascript实现数据结构:线性表--简单示例及线性表的顺序表示和实现
线性表(linear list)是最常用且最简单的一种数据结构.一个线性表是n个数据元素的有限序列.在稍复杂的线性表中,一个数据元素可以由若干个数据项(item)组成. 其中: 数据元素的个数n定义为 ...
- javascript实现数据结构:线性表--线性链表(链式存储结构)
上一节中, 线性表的顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中任一元素,它的存储位置可用一个简单,直观的公式来表示.然后,另一方面来看,这个特点也造成这种存储 ...
- Java数据结构之线性表(2)
从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...
- Java数据结构之线性表
从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...
- C 数据结构1——线性表分析(顺序存储、链式存储)
之前是由于学校工作室招新,跟着大伙工作室招新训练营学习数据结构,那个时候,纯碎是小白(至少比现在白很多)那个时候,学习数据结构,真的是一脸茫然,虽然写出来了,但真的不知道在干嘛.调试过程中,各种bug ...
随机推荐
- [NLP] 相对位置编码(一) Relative Position Representatitons (RPR) - Transformer
对于Transformer模型的positional encoding,最初在Attention is all you need的文章中提出的是进行绝对位置编码,之后Shaw在2018年的文章中提出了 ...
- 安装win10体验
没事干了,心血来潮弄了个win10专业版. 讲硬盘重新分区了,没办法,原来分的太少了. 使用winpe启动,直接将下载的win10还原到c盘,成功启动,设置的时候让提示输入id,没有啊?研究发现可以先 ...
- CSDN 免积分下载
你可能不相信这个标题,那么打开下面的链接试试吧 ↓↓↓ Github项目 最新功能 ↓↓↓ 0积分资源搜索 0积分资源搜索(备用地址) CSDN资源导出 CSDN资源下载体验群 (每日可免费下载一次) ...
- ubuntu防火墙规则之ufw
前言 因公司项目的需求,需要对客户端机器简便使用防火墙的功能,所以可在页面进行简便设置防护墙规则,当然,这个功能需求放到我手上我才有机会学到.因为客户端机器都是ubuntu的,所以当然用了ubuntu ...
- 彻底理解kubernetes CNI
kubernetes各版本离线安装包 CNI接口很简单,特别一些新手一定要克服恐惧心里,和我一探究竟,本文结合原理与实践,认真读下来一定会对原理理解非常透彻. 环境介绍 我们安装kubernetes时 ...
- spark shuffle的写操作之准备工作
前言 在前三篇文章中,spark 源码分析之十九 -- DAG的生成和Stage的划分 剖析了DAG的构建和Stage的划分,spark 源码分析之二十 -- Stage的提交 剖析了TaskSet任 ...
- 高性能MySQL之基础架构
一.背景 为什么我们需要先学习MYSQL的基础架构先呢? 原因很简单,当我们需要了解一件事物的时候,我们只有站在宏观的层面,才能层层剥丝抽茧的去理解问题.举个例子,我们要看一个框架的源码,一开始就想进 ...
- Educational Codeforces Round 70 (Rated for Div. 2)
这次真的好难...... 我这个绿名蒟蒻真的要崩溃了555... 我第二题就不会写...... 暴力搜索MLE得飞起. 好像用到最短路?然而我并没有学过,看来这个知识点又要学. 后面的题目赛中都没看, ...
- TI MSP430工程配置及2019年电赛A题编程示例(使用430 F5529)
配置 第一步:右击工程,选择Options 第二步:在General Options的Target选项卡里选择对应的器件Device,这里是MSP430G2231 第三步:在Debugger里选择FE ...
- 【POJ - 2385】Apple Catching(动态规划)
Apple Catching 直接翻译了 Descriptions 有两棵APP树,编号为1,2.每一秒,这两棵APP树中的其中一棵会掉一个APP.每一秒,你可以选择在当前APP树下接APP,或者迅速 ...