C语言数据结构——顺序表结构及算法

C语言数据结构——顺序表

#include<stdio.h>// 引入头文件 
#define ListSize 100//定义表长为100 
typedef int DataType;//定义一种int类型的类型符DataType 
typedef struct{ //定义一种结构体类型 
DataType Data[ListSize];//定义一种int类型的数组,长度为100 
int length;//定义长度 
}SeqList;//新定义的结构类型名为SeqList
void InitList(SeqList *L){//定义一个初始化方法 
L->length=0;}//将Sequence类型的长度初始化为0 
int LengthList(SeqList *L){//求长度函数 
return L->length;}//返回当前长度 
DataType GetList(SeqList *L,int i){//获取第i个数组内容函数 
return L->Data[i-1];}// 返回第i个数组内容 
int InsertList(SeqList *L,DataType t,int i){//将t插入到特定位置i中函数 
int j;//定义一个局部变量j 
if(i<1||i>L->length+1)//判断i的位置是否小于第一个或大于数组的长度 
{puts("插入位置错");//成立输出 
return 0;}//程序结束 
if(L->length>=ListSize)//判断数组是否已经满了 
{puts("表满不能插入");//成立输出 
return 0;}//
for(j=L->length-1;j>=i-1;j--){//定义一个循环,初始化j的位置为当前数组的长度减一(数组最后一个值的位置),判断j的位置是否在i想插入的数组元素位置后面 
	L->Data[j+1]=L->Data[j];//将第j—1个的元素赋值给第j个元素, 
L->Data[i-1]=t;//将t插入到第i—1个数组下标位置 
L->length++;//最大下标加一 
return 1;}//返回1 
}
int DeleteList(SeqList *L,int i ){//删除表的某一个位置中的元素 
	int j;//定义一个int型变量 
	if(i<1||i>=L->length){//判断删除的位置是否在已存在的下标中 
		puts("删除位置错");}//成立输出 
	if(L->length=0){//判断表中是否有元素 
	puts("空表不能删除");//成立输出 
	return 0;}//
	for(j=i;j<=L->length;j++)//令第j个位置的内容等于第i个位置的内容(数据前移) ,j++ 
	L->Data[j-1]=L->Data[j];//数据交换,将内容前移 
	L->length--;//长度减一 
	return 1;//返回1 
}//
int LocateList(SeqList*L,DataType t){//从顺序表中查找值为 t的节点,找到返回值i,否则返回-1; 
	int i = 1;// 定义一个int变量i,位置指向第一个数组元素 
	while(i<=L->length&&L->Data[i-1]!=t)//while循环判断i是否小于等于数组长度和第i个元素是否不等于t ,如果是则true,程序向下执行 
     i++;//i自增 
     if(L->Data[i-1]==t)//如果循环到一定程度的i值等于t 
	 return i;//返回当前位置 
	 else 
	 return -1;}//否则返回-1,查找失败
	 void Part(SeqList *L){//顺序表的划分 
	 	int i,j;//定义存放数组长度的int型变量 
	 	DataType x,y;//定义两个DataType类型用于存放内容 
	 	x=L->Data[0];//初始化x的内容为Data[0] ,用于存放第一个元素 
	 	for(i=1;i<L->length;i++)//从第2个元素开始依次循环自增 
	 	if(L->Data[i]<x){//判断第i+1个元素是否小于x,结果为true则继续向下执行 
	 		y=L->Data[i];//将第i+1个元素的值赋给y 
	 		for(j=i-1;j>=0;j--)//令j=i-1,判断j是否小于等于0;j自减 
	 	L->Data[j+1]=L->Data[j];//令后一个元素等于前一个元素 
	 	L->Data[0]=y;//将较小的元素赋给Data[0] 
		 }
	 }
	  
main(){


}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值