好久没有用C了,呵呵,差不多有2年了,哎,当时努力学C的时候还是因为考研的呢,考上之后就再没有用了。现在重新拿起,感觉不一样。

来个简单的,实现严蔚敏版数据结构中ADT规定的基本操作:

首先一个定义常量的头文件:define.h

#define TRUE 1
#define FALSE 0
#define ERROR -1

typedef int Status;

基本操作放在头文件中名为:sqlist.h

代码

/*
    author:sandals
    date:2010-05-02
    description:线性表顺序存储结构的头文件,实现了线性表的基本操作
*/

//------顺序存储结构---------
#define LIST_INIT_SIZE 100             //SqList的初始分配大小
#define LIST_INCREMENT 10              //SqList的增量分配大小
typedef struct{
    ElemType *elem;
    int length;
    int listsize;
} SqList;

Status InitList_Sq(SqList *L){
    //构造空的线性表
    L->elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
    if(!L->elem) return ERROR;
    L->length=0;
    L->listsize=LIST_INIT_SIZE;
    return TRUE;
}//InitList_Sq

void DestoryList_Sq(SqList *L){
    //销毁已存在的线性表
    if(L->elem) free(L->elem);
    L->length=0;
}//DestoryList_Sq

void ClearList_Sq(SqList *L){
    //清空线性表
    L->length=0;
}//ClearList_Sq

Status ListEmpty_Sq(SqList L){
    //线性表为空返回TRUE,否则返回FALSE
    if(!L.elem) return ERROR;
    if(L.length!=0) return TRUE;
    return FALSE;
}//ListEmpty_Sq

Status ListLength_Sq(SqList L){
    //返回线性表的长度
    if(!L.elem) return ERROR;
    return L.length;
}//ListLength_Sq

Status GetElem_Sq(SqList L,int i,ElemType *e){
    //用e返回L的第i个元素值
    if(i>L.length||i<1) return ERROR;
    *e=L.elem[i-1];
    return TRUE;
}//GetElem_Sq

int LocateElem_Sq(SqList L,ElemType e,int (*cmp)(ElemType el,ElemType e)){
    //返回L中第一个与e满足cmp函数的数据元素位序,若不存在则返回0
    int i=0;
    for(i=0;i<L.length;i++){
        if(cmp(L.elem[i],e))
            return i;
    }
    return 0;
}//LocateElem_Sq

Status PriorElem_Sq(SqList L,ElemType cur_e,ElemType *e){
    //若cur_e为L中的元素,则返回其前驱
    int loc=0;
    int compareEqual(ElemType a,ElemType b);

loc=LocateElem_Sq(L,cur_e,compareEqual);
    if(loc>0) {
        *e=L.elem[loc-1];
        return TRUE;
    }
    else
        return FALSE;
}//PriorElem_Sq

Status NextElem_Sq(SqList L,ElemType cur_e,ElemType *e){
    //若cur_e为L中的元素,返回其后继
    int loc;
    int compareEqual(ElemType a,ElemType b);

loc=LocateElem_Sq(L,cur_e,compareEqual);
    if(loc<L.length-1){
        *e=L.elem[loc+1];
        return TRUE;
    }
    else
        return FALSE;
}

Status ListInsert_Sq(SqList *L,int i,ElemType e){
    //在L的每i个元素之前插入e
    int j=0;

if((i>L->length&&L->length!=0)||i<1) return ERROR;//位置不合法

if(L->length>=L->listsize)
    {
        L->elem=(ElemType*)realloc(L->elem,(LIST_INIT_SIZE+LIST_INCREMENT)*sizeof(ElemType));
        if(!L->elem) return ERROR;//分配失败
        L->listsize+=LIST_INCREMENT;
    }

for(j=L->length;j>=i;j--){
        L->elem[j]=L->elem[j-1];
    }
    L->elem[j]=e;
    L->length++;
    return TRUE;
}//ListInsert_Sq

Status ListDelete_Sq(SqList *L,int i,ElemType *e){
    //删除L中第i元素,并用e返回
    int j=0;

if(L->length==0||i<1||i>L->length) return ERROR;
    *e=L->elem[i-1];
    for(j=i-1;j<L->length-1;j++)
        L->elem[j]=L->elem[j+1];
    L->length--;
    return TRUE;
}//ListDelete_Sq

void ListTraverse_Sq(SqList L,void (*visit)(ElemType e)){
    //遍历L
    int i;
    for(i=0;i<L.length;i++)
        visit(L.elem[i]);
}//ListTraverse_Sq

int compareEqual(ElemType a,ElemType b){
    //比较元素,相等返回1 
    if(a==b) return TRUE;
    else
        return FALSE;
}

void visit(ElemType e){
    //输出e
    printf("%d ",e);
}

测试用的文件:sqlistTest.c

代码

#include <stdio.h>
#include <stdlib.h>

typedef int ElemType;

#include "define.h"
#include "sqlist.h"

void main(){
    SqList L;
    ElemType e;

InitList_Sq(&L);
    
    ListInsert_Sq(&L,1,1);    
    ListInsert_Sq(&L,1,2);
    ListInsert_Sq(&L,1,3);
    ListInsert_Sq(&L,1,4);
    ListTraverse_Sq(L,visit);
    printf("\n");
    if(PriorElem_Sq(L,2,&e))
    //ListDelete_Sq(&L,1,&e);
        printf("e=%d\n",e);
    //ListTraverse_Sq(L,visit);
    printf("\n");
}

测试的结果:

转载于:https://www.cnblogs.com/sandals/archive/2010/05/02/SqList.html

线性表顺序存储的基本操作方法(C语言)相关推荐

  1. 数据结构严蔚敏C语言版—线性表顺序存储结构(顺序表)C语言实现相关代码

    数据结构严蔚敏C语言版-线性表顺序存储结构(顺序表)C语言实现相关代码 1.运行环境 2.准备工作 1)项目构建 1>新建一个SeqList项目 2>新建两个文件Sources和Heade ...

  2. 关于数据结构链表问题(C语言实现)—— 线性表顺序存储设计与实现

    这是我的第一篇博客(内容为废话) 现在马上面临毕业的我,发现整理总结问题真的非常重要,刚刚开始学习数据结构,并且非科班出身的我,感觉得到压力非常大,所以开始学习完后在这进行回忆,复习学习.在这里要感谢 ...

  3. 线性表顺序存储结构的基本实现

    在上一篇博客中我们只是简单得了解了线性表的一些基本的概念.那么这一篇博客我们就来说说线性表的两种物理结构中的第一种-顺序存储结构. 一.顺序存储定义 线性表的顺序存储结构指的是用一段地址连续的存储单元 ...

  4. 线性表顺序存储完整代码

    线性表顺序存储完整代码 //1.顺序存储 #include<stdio.h> #include<stdlib.h> #include<malloc.h> #defi ...

  5. 数据结构:线性表顺序存储

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.线性表(List):0个或多个数据结构的有限序列 二.线性表的顺序存储结构 1.顺序存储定义 2.顺序存储方式 3.顺序 ...

  6. 数据结构例程——线性表顺序存储的应用

    本文是数据结构基础系列网络课程(2):线性表中第6课时线性表顺序存储的应用中所讲的例程. 例:删除元素 问题:已知长度为n的线性表A采用顺序存储结构,设计算法,删除线性表中所有值为x的数据元素. 要求 ...

  7. python线性表顺序存储实现_数据结构——基于C的线性表的顺序存储结构的基本操作的实现...

    /*** *SeqList.c *Copyright (c) 2015, XZG. All rights reserved. *Purpose: * 线性表顺序存储结构的创建.数据插入.数据获取.获取 ...

  8. 第三章 线性表---顺序存储结构

    线性表(List):零个或多个数据元素的有限序列. 若将线性表记为(a1, ..., ai-1, ai , ai+1 , ..., an),则表中 ai-1 领先于ai , ai领先于ai+1,称ai ...

  9. 使用Java模拟线性表顺序存储结构

    在数据结构中,线性表分两种结构 顺序结构和链表结构 下面使用Java模拟一下顺序结构 主要难点在顺序结构的插入和删除 import java.util.ArrayList;//线性表顺序存储结构 pu ...

最新文章

  1. ASP.NET中在线用户统计
  2. python 易错总结
  3. ubuntu查看gpu使用率_如何监控GPU卡的使用率(Linux)
  4. 详解链表在前端的应用,顺便再弄懂原型和原型链!
  5. 2019-03-4-算法-进化(罗马数字转整数)
  6. weblogic修改banner_Via WLST Monitor Weblogic Server
  7. NYOJ-525 一道水题
  8. Java实现简单工厂模式
  9. 判定系数推导 — Coefficient of Determination Derivation
  10. linux bzip指定名称,Linux基础命令---bzip2
  11. python的os库——批量修改文件名称
  12. Kali 里边没有声声音 解决办法 有帮助的话给兄弟点个赞 感激不尽
  13. uniapp 模块权限配置 权限管理 权限设置
  14. 成都传智播客11月20日就业班开班啦
  15. 二、Win10如何解决svchost一直占用网速和内存?
  16. 软著申请技巧及注意事项
  17. XCode14 iOS16适配 pod签名
  18. VB6.0 遇到“不能加载 MSCOMCTL.ocx“ 问题处理
  19. sql server 不允许保存更改,您所做的更改要求删除并重新创建以下表 的解决办法
  20. 笔记25 笨办法习题35分支和函数路线图

热门文章

  1. opencv︱图片与视频的读入、显示、写出、放缩与基本绘图函数介绍
  2. ZOJ 3380 Patchouli's Spell Cards(概率+大数)
  3. 云平台圈地须群攻莫单打
  4. 类火墙的iptables
  5. Spring Framework 4.2 中的新功能和增强功能
  6. ACdream 1148(莫比乌斯反演+分块)
  7. [经典面试题][百度]数轴上从左到右有n各点a[0], a[1], ……,a[n -1],给定一根长度为L的绳子,求绳子最多能覆盖其中的几个点。...
  8. EnterpriseDb公司的Postgres Enterprise Manager 安装图解
  9. NLP --- 最大熵模型的解法(GIS算法、IIS算法)
  10. java 获取bean的注解_如何获取spring 注解的bean