c数据结构的顺序存储的实现

本文为原创,转载请注明出处:http://blog.csdn.net/j903829182/article/details/38173819

#include<stdio.h>
#define MaxSize 100        //定义元素的大小
typedef int DataType;        //定义一个类型
typedef struct{     //定义一个结构体
  DataType list[MaxSize];
  int size;             //结构体元素的大小
}SeqList;                 //结构体的对象

//初始化
void initiate(SeqList *L){
      L->size=0;//定义初始化元素个数
}

//求当前元素的个数
int getLength(SeqList L){

	return L.size;//返回长度
}

//插入数据元素
int insertData(SeqList *L,int i,DataType x){
	//在顺序表L的第i(0<=i<=size)个位置前插入数据元素x
	//插入成功返回1,出人失败返回0
   int j;
   if(L->size>=MaxSize){
      printf("顺序表已满,无法插入!!\n");
	  return 0;
   }else if(i<0||i>L->size){
      printf("插入的位置不合法,不在指定的范围,参数i不合法!\n");
	  return 0;
   }else{
      //从后向前一致移动数据,为插入做准备
	   for(j=L->size;j>i;j--){
	         L->list[j]=L->list[j-1];
	   }
       L->list[i]=x;
	   L->size++;
	   return 1;
   }
}

//删除数据
int deleteData(SeqList *L,int i,DataType *x){
    //删除顺序表中位置为i的数据i>=0&&i<=size-1,把数据保存到x中
	//删除成功返回1,否则返回0
	int j;
	if(L->size<=0){
	    printf("顺序表已空无数据元素可删!\n");
		return 0;
	}else if(i<0||i>L->size-1){
	    printf("参数i不合法,不能删除!\n");
		return 0;
	}else{
		*x=L->list[i];
		for(j=i+1;j<=L->size-1;j++){//从前往后一次前移
		     L->list[j-1]=L->list[j];
		}
		L->size--;//数据元素减一
		return 1;
	}
}

//取出数据元素
int getData(SeqList L,int i,DataType *x){
    if(i<0||i>L.size-1){
		printf("参数i不合法,不能删除!\n");
		return 0;
	}else{
	    *x=L.list[i];
		return 1;
	}
}
int main(){
    SeqList myList;
	int i,x;
     initiate(&myList);
	 for(i=0;i<10;i++){
	     insertData(&myList,i,i+1);
	 }

	 deleteData(&myList,4,&x);
	 for(i=0;i<getLength(myList);i++){
	    getData(myList,i,&x);
		printf("%d  ",x);
	 }
	return 0;
}
#include<stdio.h>
/*
*线性结构的定义:除第一个和最后一个元素外,每个元素只有一个唯一的前驱数据元素和唯一的后继数据元素个
树型结构的定义:除根节点外,每个元素只有一个唯一的前驱数据元素可有零个或若干个后继数据元素
图型结构:每个元素可有零个或若干个前驱数据元素和零个或若干个后继数据元素
线性表:是一种最简单的线性结构,线性表的主要特点是可以在任意的位置插入和删除一个数据元素
线性表可以用顺序存储和链式存储结构存储
*/
//线性表的顺序存储的表示
#define MaxSize 100
#define true 1
#define false 0
typedef int DataType;
typedef struct{
	DataType list[MaxSize];
	int size;
}SeqList;
//初始化
void ListInitiate(SeqList *L){
  L->size=0;//设置初始元素的个数为0
}
//求当前数据元素个数
int  GetListLength(SeqList L){
   return L.size;//返回元素的个数
}
//插入数据元素
int ListInsert(SeqList *L,int i,DataType data){

	int j;//定义变量j
	if(L->size>=MaxSize){
	    printf("顺序表已满,无法插入!!\n");
		return false;//返回
	}

	if(i<0||i>L->size+1){
	   printf("输入的参数不合法,不能进行插入!!\n");
	   return false;//返回
	}else{

	for(j=L->size;j>=i;j--){
	      L->list[j]=L->list[j-1];//移动元素
	}
    L->list[i-1]=data;//赋值
	L->size++;//元素个数加一
	return true;
	}
}
//删除数据元素
int DeleteList(SeqList *L,int i,DataType *data){
	int j=0;
    if(L->size==0){
		printf("线性表为空,不能执行删除操作!!\n");
		return false;
	}

	if(i<0||i>L->size){

		printf("删除的位置i不对,不能够进行删除!!\n");
		return false;
	}else{
		*data=L->list[i-1];
		for(j=i;j<L->size;j++){
		    L->list[j-1]=L->list[j];
		}

		L->size--;
		return true;
	}
}
//取数据元素
int ListGet(SeqList *L,int i,DataType *data){
	if(i<0||i>L->size){

		printf("取的位置不正确,不能进行取值操作!!\n");
		return false;
	}else{
		*data=L->list[i-1];
	    return true;
	}

}
//判断是否为空的操作
int  Empty(SeqList L){
	if(L.size==0){
	   return true;
	}else{
	   return false;
	}
}
//打印所有输出的函数
void displayData(SeqList L){
	int i;
	for(i=0;i<L.size;i++){
	    printf("%d ",L.list[i]);
	}
}
/*anthor 独孤九剑
  time 2014/4/7
*/
//主函数
int main(){

	int i;
	int data;
	SeqList L;
    ListInitiate(&L);
	for(i=1;i<10;i++){
	   ListInsert(&L,i,i);
	}

	//	displayData(L);
	 //ListInsert(&L,5,45);
	displayData(L);
	printf("\n");
	DeleteList(&L,5,&data);
	printf("\n");
	displayData(L);
	printf("\n");
	printf("%d %d\n",sizeof(SeqList),L.size);
	return 0;
}
//顺序表的主要优点是:算法简单,内容单元利用率较高:
//主要缺点是:需要预先确定数据元素的最大个数

c数据结构的顺序存储的实现

时间: 2024-10-11 00:42:33

c数据结构的顺序存储的实现的相关文章

【数据结构】顺序存储单链表

数据结构之单链表的顺序存储实现 闲来无事,回顾下以前学过的数据结构,写个玩玩,理论的东西就不多说了,网上一搜一大堆: 重要的是需要掌握这种数据结构的思想,整个数据结构这门课最重要的也是思想! 下面是代码: //====================================================================== // // Copyright (C) 2014-2015 SCOTT // All rights reserved // // filename:

(数据结构)顺序存储的线性表

---恢复内容开始--- 推荐一本学习书籍:程杰的<大话数据结构>. 既然是数据结构,那什么是数据结构呢?这里补充一些基本术语和概念. 数据结构: 是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科. 数据: 是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号总集. 数据元素: 是组成数据.有一定意义的基本单位,在计算机中通常作为整体处理.也成为记录. 数据项: 一个数据元素可以由若干个数据项组成.数据项是数据不可分

大话数据结构——队列顺序存储结构

#include<iostream> using namespace std; #define OK 1 #define TRUE 1 #define FALSE 0 #define ERROR 0 #define MAXSIZE 10 typedef int status;//返回的状态值 typedef int elemtype;//数据的类型 //数据结构 typedef struct queue_list { elemtype data[MAXSIZE];//队列里的元素 int re

动态分配的顺序线性表的十五种操作—C语言实现

线性表 定义:是最常用的,也是最简单的数据结构,是长度为n个数据元素的有序的序列. 含有大量记录的线性表叫文件 记录:稍微复杂的线性表里,数据元素为若干个数据项组成,这时把一个数据元素叫记录 结构特点:在非空有限的条件下,存在唯一的一个表头结点,唯一的一个表尾结点,除去第一个元素之外,每个数据元素都只有一个前驱,除去最后一个元素之外,每一个数据元素都只有一个后继. 注意:线性表中的数据元素可以是各种各样的,但同一线性表中的元素必定具有相同特性(属于同一数据对象,类似数组).线性表的数据元素间有序

typeof、offsetof、container_of的解释

链表是内核最经典的数据结构之一,说到链表就不得不提及内核最经典(没有之一)的宏container_of. container_of似乎就是为链表而生的,它的主要作用是根据一个结构体变量中的一个域成员变量的指针来获取指向整个结构体变量的指针,最典型的应用就是根据链表节点获取链表上的元素对象. container_of的宏定义如下: #define container_of(ptr, type, member) ({            \ const typeof( ((type *)0)->m

数据结构——二叉树概述及其数组(顺序存储)表达法

树与二叉树: 什么是树呢?就是一个节点上会有很多分叉的数据结构.一般的,对于一棵树,我们需要的结构体为一个数据块和几个指针块,这就相当于很多个链表交织在了一起,实际上,链表也可以算是一种特殊的树,而我要讲的,也是一种特殊的树--二叉树. 对于树的各个节点,都有两个属性,称为度(degree),他的意思就是这个节点所拥有的子节点的数量.还有一个属性,称为深度(depth),指节点到根的距离. 什么是二叉树呢?顾名思义,就是度为二的树,它长这样: 如图所示,在链表中我们需要头(head),而在树中我

浅谈数据结构之线性表顺序存储(一)

 首先,数据结构是由某一数据元素集合及该集合中所有数据元素之间的关系组成.具体来说,数据结构应当包含三方面的内容:(1).数据的逻辑结构:(2).数据的存储结构:(3).对数据所施加的操作.而数据的存储结构形式有两种:顺序存储与链式存储.在这里,先谈一谈线性表的顺序存储. 线性表:零个或多个数据元素的有限序列.第一,它是一个序列,也就是说,元素之间是有顺序的:第二,它是有限的,即元素个数是有限的.而线性表的顺序存储结构,说白了,就是在内存中找块地,通过占位的形式把一定的内存空间给占了,然后把相同

一步一步学习数据结构(三)栈的顺序存储结构实现代码

//栈这种逻辑结构的实现与一般线性表的实现类似,有两种存储方式:顺序存储和链式存储 //先学习顺序存储 //1. #include<stdio.h> #include<stdlib.h> #define null NULL #define SIZE 100 typedef int dataType ; typedef struct { dataType data[SIZE]; int top; }cStack,*cStackPointer; //初始化栈空间 void initSt

6-1-二叉树顺序存储结构-树和二叉树-第6章-《数据结构》课本源码-严蔚敏吴伟民版

课本源码部分 第6章  树和二叉树 - 二叉树顺序存储结构 ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑        本源码引入的文件  链接? Status.h.Scanf.c        相关测试数据下载  链