首页 / C++ / C++ _数据结构 _线性表的顺序存储
C++ _数据结构 _线性表的顺序存储
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++ _数据结构 _线性表的顺序存储,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4943字,纯文字阅读大概需要8分钟。
内容图文
![C++ _数据结构 _线性表的顺序存储](/upload/InfoBanner/zyjiaocheng/1246/9b2d9a111cc145eaa7e3ca780cba5b3e.jpg)
#ifndef __MY_SEQLIST_H__ #define __MY_SEQLIST_H__ typedef void SeqList; typedef void SeqListNode; //链表 创建 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//__MY_SEQLIST_H__
#define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <string.h> #include <stdio.h> #include "seqlist.h"//用数组来模拟线性表 typedef struct _tag_SeqList { int capacity; int length; //int *node[100];int **node; //指针数组 //int node[capacity] ////int *node[capacity]; //int *node; // int node[i]===> *(node+i)}TSeqList; //链表 创建 SeqList* SeqList_Create(int capacity) //O(1){ int ret; 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));//置为0 tmp->capacity = capacity; tmp->length = 0; tmp->node = (int **)malloc(sizeof(void *) * capacity); if (tmp->node == NULL) { ret = 2; printf("func SeqList_Create() malloc err :%d \n", ret); return NULL; } memset(tmp->node, 0, sizeof(void *) * capacity); return tmp; } //链表 创建int SeqList_Create2(int capacity, SeqList**handle) { int ret = 0; TSeqList *tmp = NULL; tmp = (TSeqList *)malloc(sizeof(TSeqList)); if (tmp == NULL) { 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 (tmp->node == NULL) { ret = 2; printf("func SeqList_Create2() malloc err :%d \n", ret); return ret; } *handle = tmp; return ret; } //链表 销毁void SeqList_Destroy(SeqList* list) //O(1){ TSeqList *tmp = NULL; if (list == NULL) { return ; } tmp = (TSeqList *)list; if (tmp->node != NULL) { free(tmp->node); } free(tmp); return ; } ////链表 清空void SeqList_Clear(SeqList* list) //O(1){ TSeqList *tmp = NULL; if (list == NULL) { return ; } tmp = (TSeqList *)list; tmp->length = 0; memset(tmp->node, 0, (tmp->capacity * sizeof(void *)) ); return ; } //链表 长度int SeqList_Length(SeqList* list) //O(1){ TSeqList *tmp = NULL; if (list == NULL) { return -1; } tmp = (TSeqList *)list; return tmp->length; } //链表 容量 int SeqList_Capacity(SeqList* list) //O(1){ TSeqList *tmp = NULL; if (list == NULL) { return -1; } tmp = (TSeqList *)list; return tmp->capacity; } //链表 在某一个位置 插入元素int SeqList_Insert(SeqList* list, SeqListNode* node, int pos) //O(n){ TSeqList *tList = NULL; int i = 0; if (list == NULL || node==NULL) { 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--) //n { tList->node[i] = tList->node[i-1]; } tList->node[i] = (int* )node; //ok tList->length ++; return0; } //获取某一个位置的链表结点 SeqListNode* SeqList_Get(SeqList* list, int pos) //O(1){ TSeqList *tList = NULL; SeqListNode *tmp = NULL; tList = (TSeqList *)list; if (list == NULL || pos<0 || pos >=tList->length ) { return NULL; } tmp = tList->node[pos]; return tmp; } //删除某一个位置的结点 SeqListNode* SeqList_Delete(SeqList* list, int pos) ////O(n){ int i = 0; TSeqList *tList = NULL; SeqListNode *tmp = NULL; tList = (TSeqList *)list; if (list == NULL || pos <0 || pos >= tList->length) { return NULL; } tmp = tList->node[pos]; // pos = 3for (i=pos+1; i<tList->length; i++) { tList->node[i-1] = tList->node[i]; } tList->length --; return tmp; }
#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, i = 0; SeqList * list; Teacher t1, t2, t3; t1.age = 31; t2.age = 32; 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 (tmp == NULL) { 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 (tmp == NULL) { printf("func SeqList_Get() err:%d \n ", ret); return ; } printf("age:%d \n", tmp->age); } SeqList_Destroy(list); system("pause"); return ; }
原文:http://www.cnblogs.com/yaowen/p/4803596.html
内容总结
以上是互联网集市为您收集整理的C++ _数据结构 _线性表的顺序存储全部内容,希望文章能够帮你解决C++ _数据结构 _线性表的顺序存储所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。