顺序线性表——通过存放地址,实现顺序存储--C语言简单实现

来源:互联网 发布:如何给mac磁盘分区 编辑:程序博客网 时间:2024/06/14 00:01
#define  _CRT_SECURE_NO_WARNINGS #include<stdlib.h>#include<string.h>#include<stdio.h>#include"seqlist.h"typedef struct Teacher{char name[32];int age;}Teacher;void main(){int ret = 0;int i = 0;SeqList *list;//线性表头指针-------------------Teacher t1, t2, t3;t1.age = 11;t2.age = 22;t3.age = 33;list = SeqList_Create(10);//思考1:如何实现链表的api(链表的算法)和具体的数据分离//思考2:链表库(业务逻辑)测试程序的业务逻辑  结点的生命周期  归谁管ret = SeqList_Insert(list, (SeqListNode*)&t1, 0);//头插法ret = SeqList_Insert(list, (SeqListNode*)&t2, 0);//头插法ret = SeqList_Insert(list, (SeqListNode*)&t3, 0);//头插法//遍历链表for (i = 0;i < SeqList_Length(list);i++){Teacher*tmp = (Teacher*)SeqList_Get(list, i);if (NULL == tmp){printf("func SeqList_Get()  err:%d \n", ret);return;}printf("age:%d\n", tmp->age);}//销毁链表while (SeqList_Length(list) > 0){Teacher *tmp = (Teacher*)SeqList_Delete(list, 0);if (NULL == tmp){printf("func SeqList_Get() err:%d \n", ret);return;}printf("age:%d \n", tmp->age);}SeqList_Destroy(list);system("pause");}

#ifndef _SEQLIST_H_#define _SEQLIST_H_typedef void SeqList;typedef void SeqListNode;typedef struct _tag_SeqList{int capacity;int length;//int *node[100];int*  *node;//存放int*  的  指针----即  指向一个元素都是int*的数组}TSeqList;//链表  创建SeqList* SeqList_Create(int capacity);//链表 销毁void SeqList_Destroy(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_H_

#include"SeqList.h"#include<stdio.h>//创建1SeqList* SeqList_Create(unsigned int capacity){if (0 ==capacity){return NULL;}int ret=0;TSeqList *tmp = NULL;tmp = (TSeqList*)malloc(sizeof(TSeqList));if (NULL == tmp){ret = 1;printf("func SeqList_Create() err:%d \n", ret);return NULL;}memset(tmp, 0, sizeof(TSeqList));tmp->capacity = capacity;tmp->length = 0;tmp->node = (int **)malloc(sizeof(void *)*capacity);if (NULL == tmp->node){ret = 2;printf("func SeqList_Create() err:%d \n", ret);return NULL;}memset(tmp->node, 0, sizeof(void*)*capacity);return tmp;}int SeqList_Create2(int capacity, SeqList** handle){if (NULL == handle){return -1;}int ret = 0;TSeqList *tmp = NULL;tmp = (TSeqList*)malloc(sizeof(TSeqList));if (NULL == tmp){ret = 1;printf("func SeqList_Create2() err;%d \n", ret);return ret;}memset(tmp, 0, sizeof(TSeqList));tmp->capacity = capacity;tmp->length = 0;tmp->node = (int**)malloc(sizeof(void*)*capacity);if (NULL == tmp->node){ret = 2;printf("func SeqList_Create2() err;%d \n", ret);return ret;}*handle = tmp;return ret;}//销毁void SeqList_Destroy(SeqList* list){TSeqList *tmp = NULL;if (NULL == list){return;}tmp = (TSeqList*)list;if (NULL != tmp->node){free(tmp->node);}free(tmp);return;}//清空void SeqList_Clear(SeqList* list){TSeqList *tmp = NULL;if (NULL == list){return;}tmp=(TSeqList*)list;tmp->length = 0;memset(tmp->node, 0, tmp->capacity * sizeof(void*));return;}//链表  长度int SeqList_Length(SeqList* list){TSeqList* tmp = NULL;if (NULL == list){return -1;}tmp = (TSeqList*)list;return tmp->length;}//链表  容量int SeqList_Capacity(SeqList*list){TSeqList* tmp = NULL;if (NULL == list){return -1;}tmp = (TSeqList*)list;return tmp->capacity;}//链表  插入int SeqList_Insert(SeqList *list, SeqListNode *node, int pos){TSeqList  *tList = NULL;int i = 0;if (NULL == list || NULL == node){return -1;}tList = (TSeqList*)list;//如果满了if (tList->length >= tList->capacity){return -2;}//pos位置的容错处理if (pos > tList->length){pos = tList->length;}for (i = tList->length;i > pos;i--){tList->node[i] = tList->node[i - 1];}tList->node[i] = (int*)node;tList->length++;return 0;}//获取某一个位置的链表节点SeqListNode* SeqList_Get(SeqList* list, int pos){TSeqList *tList = NULL;SeqListNode *tmp = NULL;tList = (TSeqList*)list;if (NULL == list || pos < 0 || pos >= tList->length){return NULL;}tmp = tList->node[pos];return tmp;}//删除某一个位置的结点SeqListNode* SeqList_Delete(SeqList* list, int pos){int i = 0;TSeqList *tList = NULL;SeqListNode*tmp = NULL;tList = (TSeqList*)list;if (NULL == list || pos < 0 || pos >= tList->length){return NULL;}tmp = tList->node[pos];for (i = pos + 1;i < tList->length;i++){tList->node[i - 1] = tList->node[i];}tList->length--;return tmp;}

0 0
原创粉丝点击