一个线性表表实现,函数声明放在 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. Pyspider抓取静态页面

    近期,我想爬一批新闻资讯的内容.新闻类型的网址很多,我想看看有没有一个网页上能包罗尽可能多的新闻网站呢,于是就发现了下面这个网页 http://news.hao123.com/wangzhi 这个页面 ...

  2. VC++ MFC单文档应用程序SDI下调用glGenBuffersARB(1, &pbo)方法编译通过但执行时出错原因分析及解决办法:glewInit()初始化的错误

    1.问题症状 在VC++环境下,利用MFC单文档应用程序SDI下开发OpenGL程序,当调用glGenBuffersARB(1, &pbo)方法编译通过但执行时出错,出错代码如下: OpenG ...

  3. 将如下三组不同类型的数据利用DataInputStream和DataOutputStream写入文件,然后从文件中读出

    三组数据如下: {19.99 , 9.99 , 15.99 , 3.99 , 4.99} {12 , 8 , 13 ,29 ,50} {"Java T-shirt" , " ...

  4. # 《网络对抗》Exp1 PC平台逆向破解20155337祁家伟

    <网络对抗>Exp1 PC平台逆向破解20155337祁家伟 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会 ...

  5. Luogu P1558 色板游戏

    (此题与POJ2777重题) 为了加深对线段树的记忆,然后开始搞这道题. TM的WA了一下午就是发现x可能大于y(然而题目里说的还很清楚,我TM没看见) 这道题只需要在线段树的板子上改一些地方就可以了 ...

  6. Hadoop开发第3期---Hadoop的伪分布式安装

    一.准备工作 1. 远程连接工具的安装 PieTTY 是在PuTTY 基础上开发的,改进了Putty 的用户界面,提供了多语种支持.Putty 作为远程连接linux 的工具,支持SSH 和telne ...

  7. Linux 平台和 Windows平台下 Unicode与UTF-8互转

    Windows: unsigned char * make_utf8_string(const wchar_t *unicode) { , index = , out_index = ; unsign ...

  8. 由于未能创建 Microsoft Visual C# 2008 编译器,因此未能打开项目 "..."的解决方法

    如果遇到这种问题,我们通常只要在 Visual Studio 2017 的命令提示符工具里执行下列命令即可: devenv /resetskippkgs 如果还是不行的话,可以先把 Visual St ...

  9. python3 简单进度条代码

    进度条代码函数实现 import sys, time class ShowProcess(object): """ 显示处理进度的类 调用该类相关函数即可实现处理进度的显 ...

  10. mysql安装版多次安装导致安装失败的解决方法(windows)(直接使用免安装方法)

    https://www.cnblogs.com/feilongblog/p/mysql_install_init.html 测试成功 要点:mysqld install MySQL --default ...