一、创建一个可复用的顺序线性表
来源:互联网 发布:linux如何安装xz 编辑:程序博客网 时间:2024/06/08 01:10
#ifndef _SEQLIST_H_
#define _SEQLIST_H_
typedef void SeqList;
typedef void SeqListNode;
SeqList* SeqList_Create(int capacity); //创建一个线性表
void SeqList_Destory(SeqList* list); //销毁一个线性表
void SeqList_Clear(SeqList* list); //清空一个线性表
int SeqList_Length(SeqList* list); //获取一个线性表的长度
int SeqList_Capacity(SeqList* list); //获取线性表的容量
int SeqList_Insert(SeqList* list,SeqListNode* node,int pos); //在线性表插入一个元素
SeqListNode* SeqList_Get(SeqList* list,int pos); //获取线性表某个位置的元素
SeqListNode* SeqList_Delete(SeqList* list,int pos); //删除线性表的某个元素
#endif
二、SeqList.c
#include<stdio.h>
#include<malloc.h>
#include<SeqList.h>
typedef unsigned int TSeqListNode;
typedef struct _tag_SeqList
{
int capacity; //线性表的最大容量
int length; //当前线性表的长度
TSeqListNode* node; //存储空间的起始位置
}TSeqList;
SeqList* SeqList_Create(int capacity )
{
TSeqList* ret=NULL; //地址初始化为NULL
if(capacity>=0) //最大容量大于0时,进入
{
ret=(TSeqList*)malloc(sizeof(TSeqList)+sizeof(TSeqListNode)*capacity) //分配内存空间地址
}
if(ret! !=NULL) //分配到地址时进入
{
ret->capacity=capacity; //初始化线性表的最大容量
ret->length=0; //初始化线性当前的长度
ret->node=(TSeqListNode*)(ret+1); //初始化线性表的地址
}
return ret;
}
void SeqList_Destroy(SeqList* list)
{
free(list); //释放链表存储的空间
}
void SeqList_Clear(SeqList* list)
{
TSeqList* sList=(SeqList*)list; //将线性表强制转化为SeqList类型的
if(sList!=NULL) //判断线性表是否为空
{
sList->length=0; //将当前的长度置0,清空链表中的所有元素
}
}
int SeqList_Length(SeqList* list) //获取线性表当前的长度
{
TSeqList* sList=(TSeqList*)list; //将线性表强制转化为SeqList类型的
if(sList!=NULL) //判断线性表是否为空
{
ret=sList->length; //将链表当前的长度的值赋给ret
}
return ret; //返回ret的值
}
int SeqList_Capacity(SeqList* list) //获取线性表当前容量的最大值
{
TSeqList* sList=(TSeqList*)list; //将线性表强制转化为SeqList类型的
ret=-1; //ret置为-1,当线性表为null时,返回错误提示
if(sList!=NULL) //判断链表是否为null
{
ret=sList->capacity; //将线性表的最大容量值赋给ret
}
return ret;
}
int SeqList_Insert(SeqList* list,SeqListNode* node,int pos) //在某个位置插入某个元素
{
TSeqList* sList=(TSeqList*)list; //将线性表强制转化为SeqList类型的
int ret =(sList!=NULL); //判断线性表是否合法(线性表不能为null)
int i=0;
ret=ret&&(sList->length+1<=sList->capacity); //判断插入位置是否合法(插入的位置应该从0开始,但不能大于最大的容量值)
ret=ret&&(0<=pos);
if(ret)
{
if(pos>=sList->length)
{
pos=sList->length; //如果插入的位置大于线性表当前的长度,则将视插入的位置为最后一位
}
for(i=sList->length;i>pos;i--) //从最后一位开始,到pos的后一位进行循环依次向后移一位
{
sList->node[i]=sList->node[i-1]; //依次向后移一位
}
sList->node[i]=(TSeqListNode)node; //将新元素插入表中
sList->length++; //长度加一
}
return ret;
}
SeqListNode* SeqList_Get(SeqList* list, int pos) // 获取线性表某个位置的元素
{
TSeqList* sList = (TSeqList*)list;
SeqListNode* ret = NULL;
if( (sList != NULL) && (0 <= pos) && (pos < sList->length) ) //判断线性表的是否合法,以及获取的位置是否合法
{
ret = (SeqListNode*)(sList->node[pos]); //将获取的元素赋值给ret
}
return ret;
}
SeqListNode* SeqList_Delete(SeqList* list, int pos) //删除线性表某个位置的元素
{
TSeqList* sList = (TSeqList*)list;
SeqListNode* ret = SeqList_Get(list, pos); //将要删除的元素获取出来
int i = 0;
if( ret != NULL )
{
for(i=pos+1; i<sList->length; i++)
{
sList->node[i-1] = sList->node[i]; //将pos后面一位到最后一位依次向前移一个位置
}
sList->length--; //长度减一
}
return ret;
}
第一二部分创建了可复用的顺序线性表,一个完整的顺序线性表表达成功;
接着我们进行第三步,通过main函数进行编写,也可称为线性表的操作;
三、main.c
#include <stdio.h>
#include <stdlib.h>
#include "SeqList.h"
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[])
{
SeqList* list = SeqList_Create(5);
int i = 0;
int j = 1;
int k = 2;
int x = 3;
int y = 4;
int z = 5;
int index = 0;
SeqList_Insert(list, &i, 0);
SeqList_Insert(list, &j, 0);
SeqList_Insert(list, &k, 0);
SeqList_Insert(list, &x, 0);
SeqList_Insert(list, &y, 0);
SeqList_Insert(list, &z, 0);
for(index=0; index<SeqList_Length(list); index++)
{
int* p = (int*)SeqList_Get(list, index);
printf("%d\n", *p);
}
printf("\n");
while( SeqList_Length(list) > 0 )
{
int* p = (int*)SeqList_Delete(list, 0);
printf("%d\n", *p);
}
SeqList_Destroy(list);
return 0;
}
执行结果:
- 一、创建一个可复用的顺序线性表
- 顺序线性表的创建插入
- 线性顺序表的创建与使用
- 线性表—顺序表-创建线性表的实现
- 复习一:顺序线性表的操作.
- 线性表(一)之线性表的顺序存储结构
- 【一】线性表以及线性表的顺序存储结构
- 顺序线性表(一)
- 【数据结构】线性表之顺序表的创建
- 进击的数据结构一之线性表的顺序结构
- 线性表系列(一)-顺序表的详解与实现
- 实验一:线性表实验-顺序表的实现
- 实验一 线性表的顺序表示与实现
- 数据结构一 线性表的顺序存储结构
- 大话数据结构一:线性表的顺序存储结构
- 数据结构实验一 线性表的顺序存储实验
- 学习 线性表的顺序存储 总结一
- 线性表的实现(一)顺序存储结构
- 1005. Spell It Right (20)
- html5本地数据库操作
- PyCharm快捷键和常用设置
- DjangoUnicodeDecodeError utf8编码错误解决办法
- OS X 10.10 进入系统后,一直在转圈,解决办法
- 一、创建一个可复用的顺序线性表
- 超像素分割算法
- enum在编程中的应用(c、c++)
- UIView的setNeedsDisplay和setNeedsLayout方法调用
- seven-things-you-should-known-about-ie-8
- Lua table函数库
- 陈怡暖:纪要助黄金逃过鬼门关,美数据开火或引波动
- Bitmap使用分享
- 数据库分区分库