算法笔记之栈、队列、链表

来源:互联网 发布:大数据 竞品分析 编辑:程序博客网 时间:2024/04/29 07:10
1, 队列:
基本概念: 队列是一种特殊的线性结构,它只允许在队列的首部(head)进行删除操作(称为出队);而在队列的尾部(tail)进行插入操作(入队)。而当队列中没有元素时(即 head == tail),称为空队列。First In First Out(FIFO)原则 
算法应用:队列是广度优先搜索以及队列优化的 Bellman_Ford 最短路算法的核心数据结构。
基本元素:一个数组,两个变量

其封装结构休类型:

<span style="white-space:pre"></span>struct queue {int data[100];//队列主体,存储内容int head;//队首索引int tail;//队尾索引};
定义结构体变量:struct queue q;

队列操作的简单Damo:

//初始化void init(){}//是否为空队列:返回1为空;int isEmpty() {retrun q.head == q.tail;}//入队列boolean push(int data) {//这里不进行队列满的情况}//实例这里后面再补上

2, 栈:
基本概念:栈限定为只能在一端进行插入和删除操作,是一种后进先出的数据结构。
基本元素: 一个一维数组,一个指向栈顶的变量 top:

        int data[100];int top = 0;//实例这里后面再补上

3, 链表:
基本概念:
实现链表: 1,需要使用指针和动态分配内存函数 malloc来实现。

<span style="white-space:pre"></span>#include <stdlib.h>int *p;p = (int *) malloc(sizeof(int)); //int* 以 int 4个字节的连续内存来作为一个整体来存放整数。
其封装结构体:
struct node {int data;struct node *next;}

建立链表基本步骤如下

//头指针的作用是方便以后从头遍历整个链表。 struct node *head;  // 头指针初始为空 head = NULL;  //创建第一个结点 struct node *p; //动态申请空间 p = (struct node *) malloc (sizeof(struct node)); scanf("%d",a); //将数据存储到当前结点 p->data = a; p->next = NULL; if(head == NULL) {head = p;//保存头结点 }else{q->next = p;//将上一结点的后继指针指向当前结点 } q = p;//导向新结点;











0 0
原创粉丝点击