双链表与栈

1.双链表的定义
双链表比单链表多了一个向前的指针域来指向前一个结点,可以从前往后或从后往前操作。
typedef struct dblinknode
{
data_type data;//数据域
struct dblinknode *pre;//指向前一个结点的首地址
struct dblinknode *next;//指向下一个结点的首地址
}DBLinkNode;
2.双链表中间插入
pNew指向一个新结点,要插入的数的位置进行插入
1.先找到要插入的位置
pTmp =NULL
for(i = 1;i <=pos-1;i++)
{
pTmp = pTmp->next;
}
2. pNew->next =pTmp->nex;
pNew->pre = pTmp;
if(pTmp->next!=NULL)pTmp->next->pre=pNew;
pTmp->next = pNew;
 
2.栈的定义
        栈是限制在一端进行插入操作和删除操作的线性表(俗称堆栈),允许进行操作的一端称为“栈顶”,另一固定端称为“栈底”,当栈中没有元素时称为“空栈”。特点:后进先出(LIFO) 栈是限制在一端进行插入操作和删除操作的线性表(俗称堆栈),允许进行操作的一端称为“栈顶”,另一固定端称为“栈底”,当栈中没有元素时称为“空栈”。特点:后进先出(LIFO)。
顺序栈的定义
typedef struct stack
{
data_type arr[N[; //顺序且连续存储,大小固定
int top;// top ==-1;空。top == N;满
}Stack;

入栈

int Pushstack( Stack *pstack, data_type item)
if(NULL == pStack)

{
return NOEXIT; 

//判断是否为满 
if(pstack->top ==N-1)

{
return FULL; 

pStack->top++; 
pStack->arr[pStack->top] = item;
return OK; 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
链式存储的可以通过双向链表实现双向链表是一种数据结构,其中每个节点都包含一个指向前驱节点和后继节点的指针。是一种具有后进先出(LIFO)特性的数据结构,可以在链表的头部进行插入和删除操作。 下面是使用双向链表实现链式存储的的示例代码(使用C++语言): ```cpp #include <iostream> // 定义双向链表节点结构体 struct Node { int data; // 数据 Node* prev; // 前驱节点指针 Node* next; // 后继节点指针 Node(int val) : data(val), prev(nullptr), next(nullptr) {} }; // 定义链式存储的类 class Stack { private: Node* top; // 顶指针 public: Stack() : top(nullptr) {} // 判断是否为空 bool isEmpty() { return top == nullptr; } // 入操作 void push(int val) { Node* newNode = new Node(val); if (isEmpty()) { top = newNode; } else { newNode->next = top; top->prev = newNode; top = newNode; } std::cout << val << " 入成功!" << std::endl; } // 出操作 int pop() { if (isEmpty()) { std::cout << "为空,无法进行出操作!" << std::endl; return -1; // 返回一个特殊值表示出错 } int val = top->data; Node* temp = top; if (top->next != nullptr) { top = top->next; top->prev = nullptr; } else { top = nullptr; } delete temp; std::cout << val << " 出成功!" << std::endl; return val; } // 获取顶元素 int getTop() { if (isEmpty()) { std::cout << "为空,无法获取顶元素!" << std::endl; return -1; // 返回一个特殊值表示出错 } return top->data; } }; int main() { Stack stack; stack.push(10); stack.push(20); stack.push(30); std::cout << "顶元素为:" << stack.getTop() << std::endl; stack.pop(); stack.pop(); std::cout << "顶元素为:" << stack.getTop() << std::endl; stack.pop(); return 0; } ``` 这个示例中,我们使用双向链表的头部作为顶,并且在入操作时将新节点插入链表的头部,出操作时删除链表的头部节点。通过双向链表的前驱和后继指针,我们可以方便地在链表头部进行插入和删除操作,并且可以随时获取顶元素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值