算法导论 数据结构

栈 ;先进后出;羽毛球筒,第一个放进去,最后一个拿出来,球桶只有一个开口。
队列;先进先出;羽毛球筒,两个开口,一个进口,一个出口。
链表;第一元素包含着本身的值第二个元素的地址,以此类推,元素相互关联。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
栈代码走起
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<assert.h>
#define N 10
typedef struct stack SS;//栈
int push(SS *p,int n);//压栈
int pop(SS* p);//出栈
struct stack {//栈
    int array[N];
    int top;
};
int main()
{

    SS S1;
    S1.top = 0;
    int n,len,i=0;
    while(~scanf("%d", &n)) {
        len=push(&S1, n);//对S1压入数据
        assert(len <= N);//断言
    }
    int array[N] = { 0 };

    while (S1.top > 0) {//对S1提取数据
        array[i++] = pop(&S1);
    }
}

int push(SS *p, int n) {

    p->array[p->top] = n;
    return ++p->top;
}

int pop(SS* p) {
    return p->array[--p->top];

}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
队列代码走起
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<assert.h>
#define N 6
typedef struct queue SQ;//队列
struct queue{
int array[N];
int* head;
int* tail;
};//申明队列结构体
int enqueue(SQ* p, int n);//入队
int dequeue(SQ* p);//出队


int main() {
    SQ Q = { {0},Q.array,Q.array };//Q队列初始化
    int n, k = 0, tmp[N+1] = { 0 };
    while (~scanf("%d", &n)) {//入队操作
        if(enqueue(&Q,n)==-1)
            break;
    }
    while (1) {
        tmp[k++] = dequeue(&Q);//出队操作
        if (tmp[k - 1] == -1)
        {
            tmp[k - 1] = 0;
            break;
        }
    }


}
int enqueue(SQ* p, int n) {
    *p->tail = n;
    p->tail++;
    if (p->tail == &p->array[N]) {
        p->tail = &p->array[0];
    }//尾部循环
    if (p->head == p->tail)//判断溢出
        return -1;

}

int dequeue(SQ* p) {
    if (p->head == &p->array[N]) {
        p->head = &p->array[0];
    }//尾部循环
    if (p->head == p->tail) //判断溢出
        return -1;
    return *(p->head++);
}

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
双链链表代码走起
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<malloc.h>
typedef struct link SL;
struct link {
    int n;
    SL* head;
    SL* tail;
};
int main() {
    SL array = { 0,NULL };
    int n;
    SL* p = &array;
    SL* tmp = p;
    while (~scanf("%d", &n)) {
        
        p->n = n;
        p->tail = (SL*)malloc(sizeof(SL));
        p->tail->head = p;
        p = p->tail;
    }
    p->tail=NULL;
    p = &array;
    while (p->tail!=NULL) {
        printf("%d\n", p->n);
        p = p->tail;
    }



}



算法导论 文章被收录于专栏

以小白的角度诠释算法导论,假如有人看不懂,我就面壁思过。

全部评论

相关推荐

Twilight_m...:表格简历有点难绷。说说个人看法: 1.个人基本情况里好多无意义信息,什么婚姻状况、健康状况、兴趣爱好、户口所在地、身份证号码、邮政编码,不知道的以为你填什么申请表呢。 2.校内实践个人认为对找工作几乎没帮助,建议换成和测开有关的项目,实在没得写留着也行。 3.工作经历完全看不出来是干什么的,起码看着和计算机没啥关系,建议加强描述,写点你在工作期间的实际产出、解决了什么问题。 4.个人简述大而空,看着像AI生成,感觉问题最大。“Python,C,C++成为我打造高效稳定服务的得力工具”、“我渴望凭借自身技术知识与创新能力,推动人工智能技术的应用发展,助力社会实现智能化转型”有种小学作文的美感。而且你确定你个人简述里写的你都会嘛?你AI这块写的什么“深入研究”,发几篇顶会的硕博生都不一定敢这么写。而且你AI这块的能力和软测也完全无关啊。个人简述建议写你对哪些技术栈、哪些语言、哪些生产工具的掌握,写的有条理些,而且最好是和测开强相关的。
点赞 评论 收藏
分享
矫健的闭门羹烹饪师又...:本人双非本,在鹅厂测开实习,你这个简历上写的这两个项目的技术栈都差不多,能够让面试官去延伸去问的八股除了redis就再没啥了,建议项目这边可以再改改,然后专业技能那块的话,感觉linux和测试工具可以分开写,毕竟不是干一件事的,反正没实习的基础上面试就深挖项目和八股,好好卷吧
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
07-03 16:02
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务