数据结构绪论
定义
存储数据
定义与数据相关操作
逻辑结构
线性结构,树形,图形,集合
存储结构
顺序:在内存中的地址连续(优点:访问效率高)
链式:在内存中的地址不连续(优点:存储效率高)
代码
栈
//只能从一段访问或删除,以及访问的线性表
#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;
}
}
}
数据结构基础:存储与操作
本文介绍了数据结构的基本概念,包括存储数据、定义相关操作。讨论了逻辑结构的四种主要类型:线性、树形、图形和集合,并详细阐述了两种存储方式——顺序存储(如栈和队列)和链式存储(如单链表和双链表)。此外,还提供了相应的C++代码示例来展示这些数据结构的操作方法。
2583





