指针实现栈

本文介绍了栈这种数据结构,它遵循先进后出的原则,仅在表头进行插入和删除操作。文中通过C语言代码展示了栈的初始化、判断空栈、遍历、查找、插入和删除等基本操作。示例代码实现了在栈顶插入元素和删除元素的功能,并提供了按位置和按值查找元素的方法。
摘要由CSDN通过智能技术生成
  1. 栈:是一种特殊的表,只在表头进行插入和删除。表首称为栈顶,表尾称为栈底。遵循先进后出原则。
  2. 因为只在表土进行插入和删除,只记录了表头,所以查找也是从表头开始的。
  3. 这些都是一些特殊化的表,所以关键理解表就掌握了这些特殊化的表了
  4. 代码如下:
  5. `#include<stdio.h>
    #include<stdlib.h>
    typedef int ListItem;
    typedef struct snode *Snode;
    typedef struct snode{
    ListItem element;
    Snode next;//栈顶
    }Simul;
    typedef struct stack *Stack;
    typedef struct stack{
    Snode top;//栈顶
    Snode curr;//用于查找元素的指针。
    }Simul1;

Stack ListInit()
{
Stack L = (Stack)malloc(sizeof(* L));
L->top = NULL;
L->curr = NULL;
return L;
}

int IsEmpty(Stack L)
{
return L->top == NULL;
}
void ListTravel(Stack L)
{
L->curr = L->top;
while(L->curr!= NULL){
printf(" %d ",L->curr->element);
L->curr = L->curr->next;
}
}

int ListFind(Stack L,int k)//按位置查找
{
if(IsEmpty(L)) return 0;
int i = 1;
L->curr = L->top;
while(i<k){
L->curr = L->curr->next;
i++;
}
return L->curr->element;
}

int ListFound(Stack L,ListItem x)//按值查找
{
if(IsEmpty(L)) return 0;
int i = 1;
L->curr = L->top;
while(L->curr->element != x){
i++;
L->curr = L->curr->next;
}
return i;
}

void ListInsert(Stack L,ListItem x)//只能在栈顶插入
{
Snode K = (Snode)malloc(sizeof(* L));
K->element = x;
K->next = L->top; //注意这里的top不是栈中元素
L->top = K;
}

int ListDellete(Stack L)//只能在栈顶删除,所以只需要传递L即可
{
if(IsEmpty(L)) return 0;
L->top = L->top->next;
}
int main()
{
Stack L = ListInit();
ListInsert(L,1);
ListInsert(L,2);
ListInsert(L,3);
ListInsert(L,4);
ListTravel(L);
printf(" 3号位的值为 %d \n", ListFind(L,3));
printf(" 4号位的位置为 %d \n",ListFound(L,4));
ListDellete(L);
ListTravel(L);
}`
运行结果(这是修改前的结果,3号位的值应该为2,代码是正确的)
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值