苏嵌实训——day10(上)

简介: 苏嵌实训——day10(上)

一、双向循环链表


1.1 概念



0a2653c851af460fa595bd959398a8f1.png


1.2 操作


1.2.1 定义一个结点结构体


#ifndef _DOUBLELIST_H_
#define _DOUBLELIST_H_
#include <stdio.h>
#include <stdlib.h>
typedef int DataType;
//定义结点结构体
typedef struct doublelist
{
    DataType data;
    struct doublelist *front;   //保存前一个结点的地址
    struct doublelist *next;   //保存后一个结点的地址
}doublelist;


1.2.2 创建一个空的双向循环链表


//创建一个空的双向循环链表
doublelist * DoubleListCreate()
{
    doublelist *head = (doublelist *)malloc(sizeof(doublelist));
    head->front = head;
    head->next = head;
    return head;
}


1.2.3 插入数据


0a2653c851af460fa595bd959398a8f1.png


//插入数据
void DoubleListInsert(doublelist *head,DataType value)
{
    doublelist *tmp = (doublelist *)malloc(sizeof(doublelist));
    tmp->front = NULL;
    tmp->next = NULL;
    tmp->data = value;
    tmp->next = head->next;
    tmp->front = head;
    head->next->front = tmp;
    head->next = tmp;
}


1.2.4 遍历链表


//遍历双向循环链表
void DoubleListPrint(doublelist *head)
{
    doublelist *p = head;
    while(p->next != head)
    {
        p = p->next;
        printf("%d ",p->data);
    }
    putchar(10);
}


练习:头删法删除数据

2d65d23f6d4748949b924e4057485923.png

//头删法删除数据
DataType DoubleListDelete(doublelist *head)
{
    if(head->next == head)
    {
        printf("双向循环链表为空!\n");
        return (DataType)-1;
    }
    doublelist *tmp = head->next;
    head->next = tmp->next;
    tmp->next->front = head;
    DataType value = tmp->data;
    free(tmp);
    tmp = NULL;
    return value;
}


二、栈 (stack)


2.1 概念


栈的性质:后进先出

栈的操作:

入栈(压栈)push

出栈(单栈)pop


2.2 顺序栈 seqstack


2.2.1 定义数据类型


#ifndef _SEQSTACK_H_
#define _SEQSTACK_H_
#include <stdio.h>
#include <stdlib.h>
#define N 32
typedef int DataType;
typedef struct seqstack
{
    DataType data[N];
    int pos;
}seqstack;
#endif


2.2.2 定义结构体


创建栈


//创建一个空的栈
seqstack* SeqStackCreate()
{
    seqstack *s = (seqstack *)malloc(sizeof(seqstack));
    s->pos = -1;
    return s;
}


2.2.3 判断栈是否为满


//判断栈是否为满
int SeqStackIsFull(seqstack *s)
{
    return s->pos == N -1 ? 1 : 0;
}
判断栈是否为空
//判断栈是否为空
int SeqStackIsEmpty(seqstack *s)
{
    return s->pos == -1 ? 1: 0;
}


相关文章
|
2天前
|
云安全 人工智能 自然语言处理
AI说的每一句话,都靠谱吗?
阿里云提供AI全栈安全能力,其中针对AI输入与输出环节的安全合规挑战,我们构建了“开箱即用”与“按需增强”相结合的多层次、可配置的内容安全机制。
|
6天前
|
存储 人工智能 安全
AI 越智能,数据越危险?
阿里云提供AI全栈安全能力,为客户构建全链路数据保护体系,让企业敢用、能用、放心用
|
9天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
3天前
|
消息中间件 安全 NoSQL
阿里云通过中国信通院首批安全可信中间件评估
近日,由中国信通院主办的 2025(第五届)数字化转型发展大会在京举行。会上,“阿里云应用服务器软件 AliEE”、“消息队列软件 RocketMQ”、“云数据库 Tair”三款产品成功通过中国信通院“安全可信中间件”系列评估,成为首批获此认证的中间件产品。此次评估覆盖安全可信要求、功能完备性、安全防护能力、性能表现、可靠性与可维护性等核心指标,标志着阿里云中间件产品在多架构适配与安全能力上达到行业领先水平。
303 192
|
3天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
357 167
|
2天前
|
开发者
「玩透ESA」ESA启用和加速-ER在加速场景中的应用
本文介绍三种配置方法:通过“A鉴权”模板创建函数并设置触发器路由;在ESA上配置回源302跟随;以及自定义响应头。每步均配有详细截图指引,帮助开发者快速完成相关功能设置,提升服务安全性与灵活性。
305 2
|
8天前
|
数据采集 人工智能 自然语言处理
3分钟采集134篇AI文章!深度解析如何通过云无影AgentBay实现25倍并发 + LlamaIndex智能推荐
结合阿里云无影 AgentBay 云端并发采集与 LlamaIndex 智能分析,3分钟高效抓取134篇 AI Agent 文章,实现 AI 推荐、智能问答与知识沉淀,打造从数据获取到价值提炼的完整闭环。
458 93