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

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;//导向新结点;











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值