C语言实现静态顺序表的实例详解

C语言实现静态顺序表的实例详解

线性表

定义一张顺序表也就是在内存中开辟一段连续的存储空间,并给它一个名字进行标识。只有定义了一个顺序表,才能利用该顺序表存放数据元素,也才能对该顺序表进行各种操作。

接下来看看静态的顺序表,直接上代码:

SeqList.h

#define _CRT_SECURE_NO_WARNINGS 1

#ifndef __SEQLIST_H__
#define __SEQLIST_H__

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

#define MAX 10

typedef int DataType;

typedef struct SeqList
{
 DataType data[MAX];
 int sz;
}SeqList,*pSeqList;

void InitSeqList(pSeqList ps);
void PushBack(pSeqList ps, DataType d);
void PopBack(pSeqList ps);
void PushFront(pSeqList ps, DataType d);
void PopFront(pSeqList ps);
void Display(const pSeqList ps);
int Find(pSeqList ps, DataType d);
void Insert(pSeqList ps, DataType d, int pos);
void Remove(pSeqList ps, DataType d);
void RemoveAll(pSeqList ps, DataType d);
void Reverse(pSeqList ps);
void Sort(pSeqList ps);
int BinarySearch(pSeqList ps, DataType d);

#endif//__SEQLIST_H__

SeqList.c

#define _CRT_SECURE_NO_WARNINGS 1

#include "SeqList.h"

void InitSeqList(pSeqList ps)
{
 assert(ps);
 ps->sz = 0;
 memset(ps->data, 0, sizeof(DataType)*MAX);
}
void PushBack(pSeqList ps, DataType d)
{
 assert(ps);
 if (ps->sz == MAX)
 {
  return;
 }
 ps->data[ps->sz] = d;
 ps->sz++;
}
void PopBack(pSeqList ps)
{
 assert(ps);
 if (ps->sz == 0)
 {
  return;
 }
 ps->sz--;
}
void PushFront(pSeqList ps, DataType d)
{
 int i = 0;
 assert(ps);
 for (i = ps->sz; i >= 1; i--)
 {
  ps->data[i] = ps->data[i - 1];
 }
 ps->data[0] = d;
 ps->sz++;
}
void PopFront(pSeqList ps)
{
 int i = 0;
 assert(ps);
 for (i = 0; i < ps->sz; i++)
 {
  ps->data[i] = ps->data[i + 1];
 }
 ps->sz--;
}
void Display(const pSeqList ps)
{
 int i = 0;
 assert(ps);
 for (i = 0; i < ps->sz; i++)
 {
  printf("%d ", ps->data[i]);
 }
 printf("\n");
}
int Find(pSeqList ps, DataType d)
{
 int i = 0;
 assert(ps);
 for (i = 0; i < ps->sz; i++)
 {
  if (ps->data[i] == d)
  {
   return i;
  }
 }
 return -1;
}
void Insert(pSeqList ps, DataType d, int pos)
{
 int i = 0;
 assert(ps);
 if (ps->sz == MAX)
 {
  return;
 }
 //方式一
 //for (i = ps->sz - 1; i >= pos; i--)
 //{
 // ps->data[i + 1] = ps->data[i];
 //}
 //方式二
 memmove(ps->data + pos + 1, ps->data + pos, sizeof(DataType)*(ps->sz - pos));
 ps->data[pos] = d;
 ps->sz++;
}
void Remove(pSeqList ps, DataType d)
{
 int i = 0;
 int pos = 0;
 assert(ps);
 pos = Find(ps, d);
 if (pos != -1)
 {
  for (i = pos; i < ps->sz; i++)
  {
   ps->data[i] = ps->data[i + 1];
  }
  ps->sz--;
 }
}
void RemoveAll(pSeqList ps, DataType d)
{
 int i = 0;
 int pos = 0;
 assert(ps);
 pos = Find(ps, d);
 while ((pos = Find(ps, d)) != -1)
 {
  for (i = pos; i < ps->sz; i++)
  {
   ps->data[i] = ps->data[i + 1];
  }
  ps->sz--;
 }
}
void Reverse(pSeqList ps)
{
 int left = 0;
 int right = ps->sz - 1;
 assert(ps);
 while (left < right)
 {
  DataType tmp = ps->data[right];
  ps->data[right] = ps->data[left];
  ps->data[left] = tmp;
  left++;
  right--;
 }
}
void Sort(pSeqList ps)
{
 int i = 0;
 int j = 0;
 assert(ps);
 for (i = 0; i < ps->sz; i++)
 {
  for (j = 0; j < ps->sz - i - 1; j++)
  {
   if (ps->data[j]>ps->data[j + 1])
   {
    DataType tmp = ps->data[j];
    ps->data[j] = ps->data[j + 1];
    ps->data[j + 1] = tmp;
   }
  }
 }
}
int BinarySearch(pSeqList ps, DataType d)
{
 int left = 0;
 int right = ps->sz - 1;
 while (left <= right)
 {
  int mid = left - ((left - right) >> 1);
  if (d > ps->data[mid])
  {
   left = mid + 1;
  }
  else if (d < ps->data[mid])
  {
   right = mid - 1;
  }
  else
  {
   return mid;
  }
 }
 return -1;
}

test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "SeqList.h"

void test1()
{
 SeqList list;
 InitSeqList(&list);
 PushBack(&list, 1);
 PushBack(&list, 2);
 PushBack(&list, 3);
 PushBack(&list, 4);
 Display(&list);
 PopBack(&list);
 Display(&list);
 PopBack(&list);
 Display(&list);
 PopBack(&list);
 Display(&list);
 PopBack(&list);
 Display(&list);
}

void test2()
{
 int pos = 0;
 SeqList list;
 InitSeqList(&list);
 PushFront(&list, 1);
 PushFront(&list, 2);
 PushFront(&list, 3);
 PushFront(&list, 2);
 PushFront(&list, 4);
 PushFront(&list, 2);
 Display(&list);
 pos = Find(&list, 3);
 printf("%d\n", list.data[pos]);
 PopFront(&list);
 Display(&list);
 PopFront(&list);
 Display(&list);
 PopFront(&list);
 Display(&list);
 PopFront(&list);
 Display(&list);
}
void test3()
{
 int pos = 0;
 SeqList list;
 InitSeqList(&list);
 PushFront(&list, 1);
 PushFront(&list, 2);
 PushFront(&list, 3);
 PushFront(&list, 2);
 PushFront(&list, 4);
 PushFront(&list, 2);
 Display(&list);
 Insert(&list, 6, 2);
 Display(&list);
 Remove(&list, 1);
 Display(&list);
 RemoveAll(&list, 2);
 Display(&list);
}
void test4()
{
 int pos = 0;
 SeqList list;
 InitSeqList(&list);
 PushFront(&list, 1);
 PushFront(&list, 2);
 PushFront(&list, 3);
 PushFront(&list, 2);
 PushFront(&list, 4);
 Display(&list);
 Reverse(&list);
 Display(&list);
 Sort(&list);
 Display(&list);
 pos = BinarySearch(&list, 3);
 printf("%d\n", list.data[pos]);
}
int main()
{
 test4();
 system("pause");
 return 0;
}

动态顺序表的实现:http://www.jb51.net/article/120876.htm

以上使用C语言动态顺序表的实现如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • 利用C语言实现顺序表的实例操作

    本文实例讲述了C语言实现顺序表(线性表)的方法.分享给大家供大家参考,具体如下: 一:顺序表代码实现 #ifndef _SEQ_LIST_H #define _SEQ_LIST_H #include <stdio.h> #include <stdlib.h> #include <assert.h> #include <string.h> #define ElemType float //以float类型测试算法通用性,而不是以惯用的int #define I

  • C语言实现顺序表基本操作汇总

    本文汇总了C语言下实现及操作顺序表的方法,对于学习数据结构的朋友来说是一个不错的参考程序.完整代码如下: #include<stdio.h> #include<stdlib.h> #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 typedef int status ;

  • 用C语言举例讲解数据结构中的算法复杂度结与顺序表

    数据结构算法复杂度 1.影响算法效率的主要因素 (1)算法采用的策略和方法: (2)问题的输入规模: (3)编译器所产生的代码: (4)计算机执行速度. 2.时间复杂度 // 时间复杂度:2n + 5 long sum1(int n) { long ret = 0; \\1 int* array = (int*)malloc(n * sizeof(int)); \\1 int i = 0; \\1 for(i=0; i<n; i++) \\n { array[i] = i + 1; } for(

  • C语言线性表的顺序表示与实现实例详解

    1.概述 通常来说顺序表是在计算机的内存中以数组的形式保存的线性表,是用一组地址连续的存储单元依次存储数据元素的线性数据结构.线性表采用顺序存储的方式存储就称之为顺序表.顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中. 将表中元素一个接一个的存入一组连续的存储单元中,这种存储结构就是顺序结构. 采用顺序存储结构的线性表简称为" 顺序表".顺序表的存储特点是:只要确定了起始位置,表中任一元素的地址都通过下列公式得到:LOC(ai)=LOC(a1)+(i-1)*L 1≤

  • C语言实现动态顺序表的实现代码

    C语言实现动态顺序表的实现代码 顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构.线性表采用顺序存储的方式存储就称之为顺序表.顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中. 静态实现:结构体内部只需两个成员,其中一个为固定大小(MAX)的数组,用来存放我们的数据.数组大小我们可以通过在头文件中改变MAX的值来改变. 动态实现:在内存中开辟一块空间,可以随我们数据数量的增多来扩容. 来看看动态的顺序表实现: 1.seqli

  • C语言顺序表实现代码排错

    今天本来想写段代码练练手,想法挺好结果,栽了个大跟头,在这个错误上徘徊了4个小时才解决,现在分享出来,给大家提个醒,先贴上代码: 复制代码 代码如下: /******************************************** * 文件名称:sqlist.h * 文件描述:线性表顺序存储演示 * 文件作者:by Wang.J,in 2013.11.16 * 文件版本:1.0 * 修改记录:*********************************************/

  • c语言实现顺序表的基本操作

    数据结构顺序表操作 复制代码 代码如下: #include <stdio.h>#include <stdlib.h>#include <malloc.h>#define LIST_INIT_SIZE 100#define LISINCREMENT 10#define ElemType int#define Status inttypedef struct Sq{ ElemType *elem; int length; int listsize;}SqList;Statu

  • C语言顺序表的实现代码

    本文实例为大家分享了C语言实现顺序表的具体代码,供大家参考,具体内容如下 seqlist.h #ifndef __SEQLIST_H__ #define __SEQLIST_H__ #include<cstdio> #include<malloc.h> #include<assert.h> #define SEQLIST_INIT_SIZE 8 #define INC_SIZE 3 //空间增量的大小 typedef int ElemType; typedef stru

  • C语言实现静态顺序表的实例详解

    C语言实现静态顺序表的实例详解 线性表 定义一张顺序表也就是在内存中开辟一段连续的存储空间,并给它一个名字进行标识.只有定义了一个顺序表,才能利用该顺序表存放数据元素,也才能对该顺序表进行各种操作. 接下来看看静态的顺序表,直接上代码: SeqList.h #define _CRT_SECURE_NO_WARNINGS 1 #ifndef __SEQLIST_H__ #define __SEQLIST_H__ #include <stdio.h> #include <stdlib.h&g

  • C#数据结构之顺序表(SeqList)实例详解

    本文实例讲述了C#数据结构之顺序表(SeqList)实现方法.分享给大家供大家参考,具体如下: 线性结构(Linear Stucture)是数据结构(Data Structure)中最基本的结构,其特征用图形表示如下: 即:每个元素前面有且只有一个元素(称为"前驱"),同样后面有且只有一个元素(称为"后继")--注:起始元素的前驱认为是空,末尾元素的后继认为也是空,这样在概念上就不冲突了. 线性表(List)是线性结构的一种典型实现,它又可以分为:顺序表(SeqLi

  • C语言数据结构之图的遍历实例详解

    C语言数据结构之图的遍历实例详解 输入一组顶点,建立无向图的邻接矩阵.输入一组顶点,建立有向图的邻接表.分别对无向图和有向图进行DFS(深度优先遍历)和BFS(广度优先遍历).写出深度优先遍历的递归和非递归算法.根据建立的有向图,判断该图是否是有向无环图,若是,则输出其一种拓扑有序序列. 实现代码: #include <stdio.h> #include <stdlib.h> #define MAX 20 typedef struct ArcNode{ int adjvex; st

  • R语言对数据库进行操作的实例详解

    数据是关系数据库系统以规范化格式存储. 因此,要进行统计计算,我们将需要非常先进和复杂的Sql查询. 但R语言可以轻松地连接到许多关系数据库,如MySql,Oracle,Sql服务器等,并从它们获取记录作为数据框. 一旦数据在R语言环境中可用,它就变成正常的R语言数据集,并且可以使用所有强大的包和函数来操作或分析. 在本教程中,我们将使用MySql作为连接到R语言的参考数据库. RMySQL包 R语言有一个名为"RMySQL"的内置包,它提供与MySql数据库之间的本地连接. 您可以使

  • python之sqlalchemy创建表的实例详解

    python之sqlalchemy创建表的实例详解 通过sqlalchemy创建表需要三要素:引擎,基类,元素 from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column,Integer,String 引擎:也就是实体数据库连接 engine = create_engine('mysql+pymysql://go

  • oracle 的表空间实例详解

    oracle 的表空间实例详解 查询表空间 SELECT UPPER(F.TABLESPACE_NAME) "表空间名", D.TOT_GROOTTE_MB "表空间大小(M)", D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)", TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100, 2), '990.99')

  • C语言中枚举与指针的实例详解

     C语言中枚举与指针的实例详解 总结一下, 定义枚举,用typedef enum关键字, 比如 typedef enum{Red,Green,Blue} Color3; 枚举到数值的转换,如果没有指定代表数值就是从0开始算, 比如 Color3 c=Red; printf("%d",c);会显示0, 除非指定 如typedef enum{Red=3,Green=5,Blue=10} Color3; 关于类型指针的定义, 定义的时候在变量名左边加*代表此变量只是一个空指针而已, 若需要赋

  • mysql创建删除表的实例详解

    表的创建命令需要: 表的名称 字段名称 定义每个字段(类型.长度等) 语法 下面是通用的SQL语法用来创建MySQL表: CREATE TABLE table_name (column_name column_type); 现在,我们将在 test 数据库中创建以下表. create table tutorials_tbl( tutorial_id INT NOT NULL AUTO_INCREMENT, tutorial_title VARCHAR(100) NOT NULL, tuto

  • Linux使用Node.js建立访问静态网页的服务实例详解

    Linux使用Node.js建立访问静态网页的服务实例详解 一.安装node.js运行所需要的环境,:http://www.jb51.net/article/79536.htm 二.创建node目录(/node/www),并在目录下创建node.js服务文件server.js var http = require('http'); var fs = require('fs');//引入文件读取模块 var documentRoot = '/node/www';//需要访问的文件的存放目录 var

  • C语言模拟实现atoi函数的实例详解

    C语言模拟实现atoi函数的实例详解 atoi函数,主要功能是将一个字符串转变为整数,例如将"12345"–>12345.但在实现过程中,我们难免会因为考虑不够全面而漏掉比较重要的几点,今天就总结一下实现atoi函数需要注意的地方. 1.指针为NULL 2.字符串为空字符串 3.空白字符 4.正号与负号问题 5.溢出问题 6.异常字符处理 接下来看代码:(具体几种问题处理都在代码的注释中说明) #define _CRT_SECURE_NO_WARNINGS 1 #include

随机推荐