7.30 数据结构绪论-单链表 双链表 栈 队列 循环队列

数据结构基础:存储与操作
本文介绍了数据结构的基本概念,包括存储数据、定义相关操作。讨论了逻辑结构的四种主要类型:线性、树形、图形和集合,并详细阐述了两种存储方式——顺序存储(如栈和队列)和链式存储(如单链表和双链表)。此外,还提供了相应的C++代码示例来展示这些数据结构的操作方法。

数据结构绪论

定义

存储数据

定义与数据相关操作

逻辑结构

线性结构,树形,图形,集合

存储结构

顺序:在内存中的地址连续(优点:访问效率高)

链式:在内存中的地址不连续(优点:存储效率高)

代码

//只能从一段访问或删除,以及访问的线性表
#include<iostream>
#define MAX 1000
const int N=1e5+5;
using namespace std;
struct Stack{
	int top;//当top==-1 栈为空
	int S[MAX];
	//Stack():top(-1){}; 构造函数 参数表
	Stack()
	{
		top=-1;
	}
	void push(int x)//增 
	{
		if(top + 1<= MAX-1){
			S[++top]=x;
		}
	} 
	void pop(int x){//删 
		if(top>-1){
			--top;
		}
	}
	int Top()//返回头节点 
	{
		return S[top];
	}
	int empty(int x)//排空 
	{
		return top==-1;
	}
	int size()//返回长度 
	{
		return top+1;
	}
};

队列

//头结点出,尾节点进 先进先出 
#include<iostream>
using namespace std;
struct queue{
	int arr[1005],f,t;
	queue()
	{
		f=0;t=-1;
	}
	void push(int x)//增 
	{
		arr[++t]=x;
	}
	void pop()//删 
	{
		f++;
	}
	int front()//返回头节点 
	{
		return arr[f];
	}
	int size()//返回长度 
	{
		return t-f+1;
	 } 
}; 

单链表

//头结点出,尾节点进 先进先出 
#include<iostream>
using namespace std;
struct queue{
	int arr[1005],f,t;
	queue()
	{
		f=0;t=-1;
	}
	void push(int x)//增 
	{
		arr[++t]=x;
	}
	void pop()//删 
	{
		f++;
	}
	int front()//返回头节点 
	{
		return arr[f];
	}
	int size()//返回长度 
	{
		return t-f+1;
	 } 
}; 

//单链表 
#include<iostream>
using namespace std;

typedef struct node
{
	type value;//存储值
	node *next; 
 } ListNode, *head;
 
void insert(head &L,int x)//&=引用 ,函数内表示获取地址 
{
	ListNode *t=new ListNode;//*=定义时表示指针,使用时表示访问地址中的数据 ,间接寻址符 
	t->value =x;
	t->next=L->next;
	L->next=t;	
}

void del(head &L, int x)
{
	ListNode *p=L->next;
	ListNode *pre = L;
	while(p)
	{
		if(p->value==x)
		{
			pre->next = pre->next->next;
			break;
		}
		p=p->next;
		pre=pre->next;
	}
}

双链表

typedef struct node //一个节点,分为数据域和指针域 
{
	type value;//存储值 
	struct node *lnext, *rnext;//如果指针没有初始化,它是野指针
	node():lnext(NULL),rnext(NULL){}; 
 } ListNode, *head; 

void insert(head &L,int x)
{
	ListNode *t=new ListNode;//创建一个新节点 
	t->value = x;
	
	t->rnext=L->rnext;
	t->lnext=L;
	L->rnext->lnext=t;
	L->rnext=t;
 }
 
 void del(head &L,int x)
 {
 	ListNode*p = L->rnext;
 	while(p)
 	{
 		if(p->value==x)
 		{
 			p->lnext->rnext=p->rnext;
 			p->rnext->lnext=p->lnext;
 			delete p;
 			break;
		 }
	 }
  } 

用数组模拟

typedef struct node //一个节点,分为数据域和指针域 
{
	type value;//存储值 
	struct node *lnext, *rnext;//如果指针没有初始化,它是野指针
	node():lnext(NULL),rnext(NULL){}; 
 } ListNode, *head; 

void insert(head &L,int x)
{
	ListNode *t=new ListNode;//创建一个新节点 
	t->value = x;
	
	t->rnext=L->rnext;
	t->lnext=L;
	L->rnext->lnext=t;
	L->rnext=t;
 }
 
 void del(head &L,int x)
 {
 	ListNode*p = L->rnext;
 	while(p)
 	{
 		if(p->value==x)
 		{
 			p->lnext->rnext=p->rnext;
 			p->rnext->lnext=p->lnext;
 			delete p;
 			break;
		 }
	 }
  } 

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值