一个线性表表实现,函数声明放在 line_list.h 头文件汇总,函数定义放在line_list.c 中,main.c 用来测试各个函数.

1.文件 line_list.h

//  line_list.h
#ifndef __LINE_LIST_H__
#define __LINE_LIST_H__ typedef int EleType; typedef struct {
EleType* pData; //定义成指针,可以存放任意类型
unsigned int num;
unsigned int maxlength; //线性表最大长度 }List; List* CreateList(const int ); //创建线性表
void DestoryList(List*); //删除线性表
void ClearList(List*); //清空线性表
int ListAppend(List*, EleType); // 追加元素
int IsEmpty(List *); //判空
int IsFull(List *); //判满
int ListDelete(List *,unsigned int); //删除元素
int GetElement(List *,unsigned int,EleType *); // 取元素
int ListInsert(List *,unsigned int ,EleType ); //插入元素
int TraverseList(List *,int (*)(EleType * )); //遍历线性表 #endif
  1. 文件 line_list.c
// line_list.c

#include <stdio.h>
#include <stdlib.h>
#include "line_list.h" //创建线性表, maxlength为线性表最大长度
List* CreateList(const int maxlength)
{
List* ls = (List*)malloc(sizeof(List));
if(NULL != ls)
{
ls->pData = (EleType*)malloc((maxlength )*sizeof(EleType));
if(NULL != ls->pData)
{
ls->maxlength = maxlength;
ls->num = 0;
return ls;
}
}
printf("out of place.\n");
return NULL;
} //删除线性表
void DestoryList(List* ls)
{
free(ls->pData);
free(ls);
} //清空线性表
void ClearList(List* ls)
{
ls->num = 0;
} //判空,,线性表为空返回 1 ,否则返回 0
int IsEmpty(List* ls)
{
return (0 == ls->num);
} //判满,线性表已满返回 1 ,否则返回 0
int IsFull(List* ls)
{
return (ls->num == ls->maxlength);
} // 在末尾追加元素,成功返回1,失败返回0
int ListAppend(List* ls, EleType ele)
{
if(!IsFull(ls))
{
ls->pData[ls->num++] = ele; //注意这里
return 1;
}
return 0;
} //删除元素,删除编号为 n 的元素,编号为 n 的元素,索引为 n-1,成功返回1,失败返回0
int ListDelete(List* ls, unsigned int n)
{
if (!IsEmpty(ls))
{
if (n<1 || n>ls->num)
{
printf("n输入错误");
return 0;
} for( ;n<ls->num;n++ )
{
ls->pData[n-1] = ls->pData[n];
}
ls->num--;
return 1;
}
return 0;
} // 取元素编号为 n 的元素,索引为 n-1,成功返回1,失败返回0
int GetElement(List* ls,unsigned int n, EleType * ele)
{
if(!IsEmpty(ls))
{
if(n<1 || n>ls->maxlength)
{
printf("n输入错误");
return 0;
}
*ele = ls->pData[n-1];
return 1;
}
return 0;
} //插入元素,在位置 n 插入元素,编号为 n 的元素,索引为 n-1,成功返回1,失败返回0
int ListInsert(List* ls,unsigned int n, EleType ele)
{
unsigned int i=0;
if(!IsFull(ls))
{
if(n<1 || n>ls->num)
{
printf("n输入错误");
return 0;
} for(i=ls->num; i>=n;i--)
{
ls->pData[i] = ls->pData[i-1];
} ls->pData[n-1] = ele;
ls->num++;
return 1;
}
return 0;
} //遍历线性表,遍历线性表,并对元素进行操作,遍历完成返回 -1,否则返回当前元素编号。
int TraverseList(List* ls, int (*f)(EleType* ))
{
unsigned int i=0;
if (!IsEmpty(ls))
{
for (i=0;i<ls->num;i++)
{
if(!f(&ls->pData[i]))
return i+1;
}
return 0;
}
return -1;
}
  1. 文件 main.c
// main.c

#include <stdio.h>
#include "line_list.h" void ShowList(List*); //显示线性表
int PrintElement(EleType* ); //输出元素 int main()
{
int i;
EleType ele; //创建线性表
List* ls = CreateList(100);
if (NULL == ls)
{
printf("创建线性表失败\n");
return 0;
} //测试判空函数
i =IsEmpty(ls);
if(i)
{
printf("线性表为空\n");
} for (i=0;i<100;i++)
{
ListAppend(ls,i+1);
}
ShowList(ls); //测试判满函数
i =IsFull(ls);
if(i)
{
printf("线性表已满\n");
} //测试取元素
GetElement(ls,3,&ele);
printf(" ele = %d\n",ele); //测试插入
ListInsert(ls,5,23);
ShowList(ls);
ListInsert(ls,1,23);
ShowList(ls); //测试删除
ListDelete(ls,1);
ShowList(ls); ListDelete(ls,5);
ShowList(ls); return 1;
} //显示线性表
void ShowList(List* ls)
{
TraverseList(ls,PrintElement);
printf("\n");
} //输出元素
int PrintElement(EleType* ele)
{
printf("%d ",*ele);
return 1;
}

顺序表的C、C++实现的更多相关文章

  1. jdk顺序表笔记

    一.AbstractCollection 提供了集合的最大实现 继承该类,必须实现size()和iterator(),因为该类操作集合都是通过iterator 二.fail-fast策略 该策略在集合 ...

  2. c++顺序表基本功能

    头文件 #define LIST_MAX_SIZE 5#define LISTINCREMENT 2#include<assert.h>#include<string>temp ...

  3. 数据结构:顺序表(python版)

    顺序表python版的实现(部分功能未实现) #!/usr/bin/env python # -*- coding:utf-8 -*- class SeqList(object): def __ini ...

  4. 《数据结构》2.2顺序表(sequence list)

    //顺序表节点的定义 typedef struct { datatype data[MAXSIZE]; //数组容量的上限 int len; //记录最后一个元素的位置,相当于一个指针,表空时len= ...

  5. c数据结构 顺序表和链表 相关操作

    编译器:vs2013 内容: #include "stdafx.h"#include<stdio.h>#include<malloc.h>#include& ...

  6. java顺序表和树的实现

    一.顺序表 1.线性表 //java顺序表的实现,如ArrayList就是用线性表实现的,优点是查找快,缺点是添加或删除要移动很多元素,速度慢 public class SequenceList { ...

  7. 数据结构顺序表删除所有特定元素x

    顺序表类定义: template<class T> class SeqList : { public: SeqList(int mSize); ~SeqList() { delete[] ...

  8. 顺序表C语言版

    #include <stdio.h> /* * 顺序表最多输入N个数 */ #define N 10 #define OK 1 #define ERROR -1 struct sequeu ...

  9. C#线性表之顺序表

    线性表是最简单.最基本.最常用的数据结构.线性表是线性结构的抽象(Abstract), 线性结构的特点是结构中的数据元素之间存在一对一的线性关系. 这种一对一的关系指的是数据元素之间的位置关系,即: ...

  10. C语言 线性表 顺序表结构 实现

    一个能够自动扩容的顺序表 ArrList (GCC编译). #include <stdio.h> #include <stdlib.h> #include <string ...

随机推荐

  1. 简单的django配置和命令

    1.创建项目:django-admin startproject 项目名称 2.进入项目:cd 项目名称 3.创建子应用:python manage.py startapp 子应用名称 4.把子应用添 ...

  2. HDU 1978 How many ways(经典记忆化搜索)

    S - How many ways Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  3. TTL,COMS,USB,232,422,485电平之详细介绍及使用

    如有错误敬请指导! 今天来详细介绍一下TTL,COMS,USB,232,422,485电平,以及之间的转换问题. 有些地方的引脚图可能不是规范的,具体引脚以自己的模块资料为主,这篇文章着重介绍使用.. ...

  4. tomcat-在eclipse中配置tomcat容器的内存

    eclipse下的tomcat内存设置大小 在eclipse中设置: 设置步骤如下: 1.点击eclipse上的debug图标旁边的下拉箭头 2.然后选择Run Configurations, 3.系 ...

  5. Hadoop Version History and Feature

    Versions and Features Hadoop has seen significant interest over the past few years. This has led to ...

  6. 领域驱动设计理解&总结

    领域驱动设计理解&总结 这篇文章主要是通读<实现领域驱动设计>之后自己的理解和总结(同时也参照一些博文的分析来加深自己的理解): 有些疑问是自定义内容,虽然有自己的理解,但依然感觉 ...

  7. WinRT IO相关整理

    虽然一般UWP开发还是依赖.Net for UWP,但有时还是需要调用WinRT API.特别是在IO部分,WinRT有着和.Net似曾相识但又不尽相同的接口.在此对经常用到的一些地方进行一下整理. ...

  8. Verilog中的有符号计算之认知补码

    Verilog中的有符号计数,一般是自己定义的而不是像C语言之类的定义一个有符号变量就好了.所以,要想在FPGA的世界里随心所欲的进行有符号运算,必须先对补码有一个很好的认知,然后再注意Verilog ...

  9. [BZOJ2687]交与并[决策单调性]

    题意 给定 \(n\) 个区间,我们定义区间集合 \(S(|S|>1)\) 的权值为 区间交 \(\times\) 区间并,找出权值最大的区间集合. \(n\le 10^6\) 分析 首先排除区 ...

  10. selenium常用命令

    openopen(url)- 在浏览器中打开URL,可以接受相对和绝对路径两种形式type type(inputLocator, value)- 模拟人手的输入过程,往指定的input中输入值- 也适 ...