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;
}
//顺序表的主要优点是:算法简单,内容单元利用率较高:
//主要缺点是:需要预先确定数据元素的最大个数






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值