#include<stdlib.h>
#include<string.h>
#include<stdio.h>
#include"seqlist.h"
//在结构体中套1级指针
//
typedef struct _tag_SeqList
{
int length;
int capacity;
unsigned int ** node; //int* node[] //指针数组
//unsigned int *node;
}TSeqList;
SeqList* SeqList_Create(int capacity)
{
int ret = 0;
TSeqList *tmp = NULL;
tmp = (TSeqList*)malloc(sizeof(TSeqList));
if(tmp == NULL)
{
ret = -1;
printf("func SeqList_Create()err:%d\n",ret);
return NULL;
}
memset(tmp,0,sizeof(TSeqList));
//根据capacity的大小分配节点的空间
tmp->node = (unsigned int **)malloc(sizeof(unsigned int *)*capacity);
if(tmp->node == NULL)
{
ret = -2;
printf("func SeqList_Create()err:malloc err %d\n ",ret);
return NULL;
}
tmp->capacity = capacity;
tmp->length = 0;
return tmp;
}
void SeqList_Destory(SeqList* list)
{
TSeqList * tlist = NULL;
if(list == NULL)
{
return;
}
tlist = (TSeqList *)list;
if(tlist->node != NULL)
{
free(tlist->node);
}
free(tlist);
return ;
}
//清空链表//回到初始化状态
void SeqList_Clear(SeqList* list)
{
TSeqList * tlist = NULL;
if(list == NULL)
{
return;
}
tlist = (TSeqList *)list;
tlist->length = 0;
return ;
}
int SeqList_Length(SeqList* list)
{
TSeqList * tlist = NULL;
if(list == NULL)
{
return -1;
}
tlist = (TSeqList *)list;
return tlist->length;
}
int SeqList_Capacity(SeqList* list)
{
TSeqList * tlist = NULL;
if(list == NULL)
{
return -1;
}
tlist = (TSeqList *)list;
return tlist->capacity;
}
int SeqList_Insert(SeqList* list,SeqListNode* node,int pos)
{
int i = 0, ret = 0;
TSeqList * tlist = NULL;
if(list == NULL|| node==NULL || pos<0)
{
ret = -1;
printf("fun SeqList_Insert()err:%d\n",ret);
return ret;
}
tlist = (TSeqList *)list;
//判断是不是满了
if(tlist->length >= tlist->capacity)
{
ret = -2;
printf("fun SeqList_Insert()err:(tlist->length >= tlist->capacity)err:%d\n",ret);
return ret;
}
//容错修正 6个长度 容量20;用户在pos10位置插入
if(pos>=tlist->length)
{
pos = tlist->length;
}
//1 元素后移
for(i=tlist->length;i>pos;i--)
{
tlist->node[i] = tlist->node[i-1];
//a[i] = a[i-1];
//a[7] = a[6];
}
//i=3
//2插入元素
tlist->node[i] = node;
//tlist->node[i] = (unsigned int )node;//会不会丢数据 需要在64环境机器上做测试
tlist->length ++;
return 0;
}
SeqListNode* SeqList_Get(SeqList* list,int pos)
{
int i = 0;
SeqListNode* ret = 0;
TSeqList * tlist = NULL;
if(list == NULL|| pos<0)
{
printf("fun SeqList_Insert()err:%d\n",ret);
return NULL;
}
tlist = (TSeqList *)list;
ret = (void*)tlist->node[pos];
return ret;
}
SeqListNode* SeqList_Delete(SeqList* list,int pos)
{
int i = 0;
SeqListNode* ret = 0;
TSeqList * tlist = NULL;
if(list == NULL|| pos<0)//检查
{
printf("fun SeqList_Delete()err:%d\n",ret);
return NULL;
}
tlist = (TSeqList *)list;
ret = (SeqListNode *)tlist->node[pos];
for(i=pos+1;i<tlist->length;i++)//pos位置后面的元素前移
{
tlist->node[i-1] = tlist->node[i];
}
tlist->length --;
return ret;
}
dm02_线性表顺序存储设计与实现.zip_数据结构 线性表
版权申诉
163 浏览量
2022-09-21
21:47:52
上传
评论 1
收藏 1.08MB ZIP 举报
小波思基
- 粉丝: 70
- 资源: 1万+
最新资源
- #P0015. 全排列 超级简单
- pta题库答案c语言之排序4统计工龄.zip
- pta题库答案c语言之树结构7堆中的路径.zip
- pta题库答案c语言之树结构3TreeTraversalsAgain.zip
- pta题库答案c语言之树结构2ListLeaves.zip
- pta题库答案c语言之树结构1树的同构.zip
- 基于C++实现民航飞行与地图简易管理系统可执行程序+说明+详细注释.zip
- pta题库答案c语言之复杂度1最大子列和问题.zip
- 三维装箱问题(Three-Dimensional Bin Packing Problem,3D-BPP)是一个经典的组合优化问题
- 以下是一些关于Linux线程同步的基本概念和方法.txt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0