您好,欢迎来到化拓教育网。
搜索
您的当前位置:首页数据结构(C语言版)

数据结构(C语言版)

来源:化拓教育网
数据结构(C语⾔版)

数据结构(C语⾔版)绪论

1、在计算机运⾏过程中,如何合理的组织数据、⾼效的处理数据,这就是数据结构2、数据结构包括两个⽅⾯的内容:数据的逻辑结构和存储结构

① 逻辑结构是从逻辑关系上描述数据,通常有四类:集合、线性、树状和图状② 存储结构是逻辑结构在计算机中的存储表⽰,有两类:顺序和链式

3、抽象数据类型(ADT):提供类型属性和相关操作的抽象描述,下⾯是链表的抽象数据类型的定义,定义完抽象数据类型就可以进⾏接⼝的开发和实现了4、算法是为了解决某类问题⽽规定的操作⽅法

① 算法具有五个特性:有穷性、确定性、可⾏性、输⼊和输出。

② 算法的优劣应该从以下四⽅⾯来评价:正确性、可读性、健壮性和⾼效性5、算法的优劣主要是时间复杂度和空间复杂度链表建⽴抽象

类型名: 简单链表

类型属性: 可以存储⼀系列项类型操作: 初始化链表为空 确定链表为空 确定链表已满 确定链表中的项数 在链表末尾添加项

遍历链表,处理链表中的项 清空链表建⽴接⼝

这个链表中主要分为两部分:表⽰数据的结构和操作数据的函数

在链表中每个链结叫做节点(node),每个节点包含了存储内容的信息和指向下⼀个节点的指针,⾸先对节点进⾏定义struct LinkNode{

void * data;

struct LinkNode * next;};

下⾯对链表结构体进⾏定义,包括节点信息和链表的长度信息struct LList{

//头节点

struct LinkNode pHeader; //链表长度 int m_size;};

//使⽤typedef定义⼀个空指针作为链表的返回值typedef void * LinkList;

以上,关于抽象数据类型的属性部分定义完成,接下来对类型的操作⽅法进⾏定义//初始化链表

LinkList init_LinkList()//插⼊链表

void insert_LinkList(LinkList list, int pos, void * data)//遍历链表

void foreach_LinkList(LinkList list, void(*myForeach)(void *))//删除链表 按位置

void removeByPos_LinkList(LinkList list, int pos)实现接⼝

void init_LinkList(){

struct LList * mylist = malloc(sizeof(strict LList))

if(mylist == NULL){return NULL;}

mylist->pHeader.data = NULL; mylist->pHeader.next = NULL; mylist->m_size = 0;

return mylist;}

void insert_LinkList(LinkList list, int pos, void * data){

if(list == NULL){return;} if(data == NULL){return;} struct LList *mylist = list;

if(pos<0 || pos>mylist->m_size){pos = mylist->m_size;}

struct LinkNode * pCurrent = &mylist->pHeader; for(int i=0; inext;}

struct LinkNode * newNode = malloc(sizeof(struct LinkNode)); neNode->data = data; neNode->next = NULL;

newNode->next = pCurrent->next;

pCurrent->next = pCurrent;

mylist->m_size++; }

void foreach_LinkList(LinkList list, void(*myForeach)(void *)){

if (list ==NULL){return;} struct LList * mylist = list;

struct LinkNode* pCurrent = mylist->pHeader.next; for (int i = 0; i < mylist->m_size;i++) {

myForeach(pCurrent->data); pCurrent = pCurrent->next; }}

void removeByPos_LinkList(LinkList list, int pos){

if ( list == NULL){return;} struct LList * mylist = list;

if (pos < 0 || pos > mylist->m_size - 1){return;} struct LinkNode * pCurrent = &mylist->pHeader;

for (int i = 0; i < pos;i++){pCurrent = pCurrent->next;} struct LinkNode * pDel = pCurrent->next; pCurrent->next = pDel->next; free(pDel); pDel = NULL; mylist->m_size--;}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务