栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

啊哈算法——第二章:栈队列与链表

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

啊哈算法——第二章:栈队列与链表

第二章:栈队列与链表 队列

显然对于队列我们只需要记住它最重要的性质:先进先出(FIFO) 即可。
队列还包括双向队列(deque,用于实现滑动窗口算法),优先队列(priority_queue,用于实现堆)等,在后面的算法内容中会详述。
调用C++STL建立队列:queue q;即建立了一个type类型的队列,名字为q。

对于队列我们只需要记住它最重要的性质:先进后出(FILO) <或后进先出> 即可。
调用C++STL建立队列:stack s;即建立了一个type类型的队列,名字为s。

链表

链表的有关内容不再赘述,此处给出使用C++实现的双向循环链表代码,包括了链表的建立,遍历,插入以及删除结点操作。

#include 
using namespace std;
int n;
struct node{
	int data;
	node* next;
	node* prior;
}*head;
//带头结点的双向循环链表。 
void SetNode(){
	head = new node;
	head->data = 0;
	head->next = head->prior = nullptr;
	
	node *p,*q;
	for(int i=1;i<=n;i++){
		int data_in;
		cin>>data_in;
		p = new node;
		p->data = data_in;
		p->next = p->prior = nullptr;
		
		if(head->next == nullptr){
			head->next = p;
			p->prior = head;
		}
		else{
			q->next = p;
			p->prior = q;
		}
		
		q = p;
	}
	
	q->next = head;
	head->prior = q;//循环 
}
bool InsertNode(int m,int v){
	//在第m个结点后面插入结点,数据为v 
	if(m > n)	return false;
	node *p = head->next;
	int cnt = 0;
	while(++cnt < m){
		p = p->next;
	}
	node *q = new node;
	q->data = v;
	q->next = p->next;
	p->next->prior = q;
	p->next = q;
	q->prior = p;
	return true;
} 
bool DeleteNode(int m){
	if(m > n)	return false;
	int cnt = 0;
	node *p = head->next;
	while(++cnt < m){
		p = p->next;
	}
	node *q = p;
	p->prior->next = p->next;
	p->next->prior = p->prior;
	delete q;
	return true;
}
void TraverseNode(){
	node *p = head->next;
	while(p != head){
		cout<data<<' ';
		p = p->next;
	}
	cout<>n;
	SetNode();
	TraverseNode();
	DeleteNode(1);
	TraverseNode();
	InsertNode(1,2);
	TraverseNode();
	return 0;
 } 

运行结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/304188.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号