当前位置:首页 » 密码管理 » 链栈如何访问

链栈如何访问

发布时间: 2022-09-21 01:07:35

㈠ 问基础问题:关于链栈的 入栈 出栈 操作 代码,有几处不懂

p是你新建立的一个节点,你给他的data部分复制为e,之后它的next指向栈顶指针后再把,栈顶指向p,你如果用p=p->next,就是让你指会了自己本身。delete p是删除p所指的节点。所以上面不能删除。

c语言数据结构中链栈的问题

这个链栈应该就是一个用链表弄的后进先出的栈结构。top指针永远指向栈的最上面的那个节点。
这个函数是新加一个节点到这个栈中,首先分配了空间给s,s是要新加入这个栈的那个节点。
s->next=top;就是让s指向栈的最上面的那个元素。top=s;因为现在最上面的节点是s了,所以让top指向s,使s成为栈顶指针。返回的就是栈的顶上那个节点的指针。这样循环调用这个函数就可以不断的添加新节点,加入的新节点总是指向前面的那个节点,同时新加入的节点成为头节点。

㈢ 实现链式栈的基本操作:入栈、出栈、取栈顶元素、判定栈空、栈满。

#include<stdio.h>
#include<malloc.h>

structstack
{
intnumber;
structstack*next;
};

structstack*top;//指向栈顶
structstack*p;//临时指针

//创建链栈
voidcreate(intfirst_value)
{
p=(structstack*)malloc(sizeof(structstack));//申请内存空间
p->number=first_value;//给栈底赋值
p->next=NULL;//栈底的指针为空
top=p;//栈顶指向栈底
}

//进栈
voidinput(intvalue)
{
p=(structstack*)malloc(sizeof(structstack));//申请内存空间
p->number=value;//赋值
p->next=top;//指向原来的栈顶
top=p;//栈顶往上移动一位
}

//出栈
voidoutput()
{
p=top;//p=栈顶
top=top->next;//栈顶往下移动一位
free(p);//释放p
}

//清空栈
voidclear()
{
while(top->next!=NULL)//如果不是栈底
output();//出栈
free(top);//释放栈顶
}

//取栈顶元素
inttopElement()
{
returntop->number;
}

intmain()
{
inti;
create(0);
for(i=1;i<=10;i++)
input(i);
//clear();
printf(" 栈的内容: ");
for(p=top;;p=p->next)
{
printf("%d ",p->number);
if(p->next==NULL)
break;
}
printf("栈顶元素=%d ",topElement());
}

㈣ 链栈如何构造,链栈新结点如何进栈

链式栈就是用链式存储结构表示一个栈,也就是指针域。
根据栈的性质,知道栈是先进后出,所以只需要设置一个栈顶指针,还是说点C++吧
先构造一个结构模板
template<class
ElemType>
typedef
struct
Node
//建立
{
ElemType
data;//数据成员,用于存储
struct
Node*next;//指针成员,用于连接逻辑结构
}LNode;
1.构造一个空栈,只需要:
LNode*head;//定义栈顶指针
head=(LNode*)malloc(sizeof(LNode));//分配空间
head->next=NULL;//下一个为空
2.新节点:比如新节点数据位1
入栈操作:
LNode*p;
p->data=1;
p->next=head;
head=p;
总之有点类似C语言里的链表
还有什么不清楚的可以追问
希望对你有所帮助!!!

㈤ 链栈的基本操作C语言

https://..com/question/310602180072679244.html
借题 求帮忙做一道题🙏
对不住了

编程实现链栈的入栈和出栈操作。 在线等着你哦!

#include<stdio.h>
#include<stdlib.h>
typedefstructSnode
{
intdata;/*数据域*/
structSnode*next;/*指针域*/
}SNODE,*LinkStack;/*其中SNODE为链栈中的结点类型名,LinkStack为指向结点的指针类型名*/
//////////////////
LinkStackPush(LinkStacktop,inte)
/*将数据元素e压入到链栈top中,使其成为新的栈项元素*/
{
LinkStackp;
p=(LinkStack)malloc(sizeof(SNODE));/*生成一个新的结点*/
if(!p)/*如果分配空间失败,则函数返回"OVERFLOW"*/
printf("StackisOverflow ");
p->data=e;/*新结点的数据域赋值*/
p->next=top;/*修改链使新结点插入到链表的头部,并成为新的栈顶元素*/
top=p;
returntop;
}
/////////////
LinkStackPop(LinkStacktop,int*e)
/*将链栈top中的栈顶元素从栈中删除,并用e返回其值*/
{
LinkStackq;
if(!top)/*如果栈空,则函数返回ERROR*/
printf("StackisERROR ");
*e=top->data;/*将被删的栈顶元素的值保存在e中*/
q=top;/*用q记下待删的栈顶元素*/
top=q->next;
/*修改链使待删结点从链中"卸下",此时被删结点的后继成为新的栈顶元素结点*/
free(q);/*释放被删结点的存储空间*/
returntop;
}
/////////
LinkStackStack_display(LinkStacktop)
{
inte;
while(top)
{
e=top->data;
printf("%4d",e);
top=top->next;
}
returntop;
}
/////////////////////
voidmain()
{
LinkStacktop=0;
inti=0,n,e;
printf("pleaseinputthelength:");/*输入几个数*/
scanf("%d",&n);
printf("pleaseinputtheValue: ");/*输入*/
while(i<n)
{
scanf("%d",&e);
top=Push(top,e);
i++;
}
printf("thestackis: ");
Stack_display(top);
printf("pleaseinputtheinsertnode:");
scanf("%d",&e);
top=Push(top,e);
printf("thestackafterpushis: ");
Stack_display(top);
top=Pop(top,&e);
printf("thepopvalueis:%d ",e);
printf("thestackafterpopis: ");
Stack_display(top);
}

调好了麻烦采纳一下

㈦ 急!用c语言实现链栈的操作

typedef struct node
{ ElemType data;
struct node *next;
} LinkStack;
⑴置空栈
void InitLinkStack( LinkStack * & s)
{ s=NULL;
}
⑵判栈空
int IsEmptyLinkStack(LinkStack *s )
{ if(s==NULL)
return 1;
else
return 0;
}
⑶ 入栈/*将元素x插入链栈top的栈顶*/
void PushLinkStack(LinkStack* &s , ElemType x)
{ LinkStack *p;
p=malloc(sizeof(LinkStack)); /*生成新结点*s */
p->data=x;
p->next=s;
s=p;

}
⑷出栈/*删除链栈top的栈顶结点*/
int PopLinkStack (LinkStack* & s, ElemType &x)
{ LinkStack *p;
if(s==NULL) return 0;
x = s->data; /*将栈顶数据存入*x */
p = s; /*保存栈顶结点地址*/
s = s->next; /*删除原栈顶结点*/
free (p); /*释放原栈顶结点*/
return 1; /*返回新栈顶指针*/
}
(5) 取栈顶元素
int GetLinkStackTop (LinkStack* s, ElemType &x)
{
if(s==NULL) return 0;
x = s->data; /*将栈顶数据存入*x */
return 1; /*返回新栈顶指针*/
}
主函数怎么写吧

㈧ c++实现链栈的基本操作

之前学数据结构的实验我保存在了CSDN的博客上面,你感兴趣可以去看下。上面都有代码,没有的。你可以再问,我可以帮你做。80372824http://blog.csdn.net/wenjx08

㈨ 链栈的基本操作问题

OK了,下面程序可以编译,欢迎在线讨论;共同进步。。。
#include <stdio.h>
#include <stdlib.h>
typedef struct STACK
{
int data;
struct STACK *next;
}Stack;

Stack* InitStack()
{
Stack *S;
if((S=(Stack *)malloc(sizeof(Stack)))==NULL)
return 0;
S->next=NULL;
return S;
}
void GetTop(Stack *S,int &e)
{
if(S->next==NULL)
{
printf("空栈...\n");
return;
}
e=S->next->data;
}
void Push(Stack *S)
{
int item;
Stack *p;
printf("请输入要入栈的元素(输入-1结束):\n");
while(1)
{
scanf("%d",&item);
if(item==-1)
break;
if((p=(Stack *)malloc(sizeof(Stack)))==NULL)
return;
p->data=item;
p->next=S->next;
S->next=p;
}

}
void Pop(Stack *S)
{
if(S->next==NULL)
{
printf("空栈...\n");
return;
}
S->next=S->next->next;
}
void OutputStack(Stack *S)
{
Stack *p;
p=S->next;
if(S->next==NULL)
{
printf("空栈...\n");
return;
}
while(p!=NULL)
{
printf("%4d",p->data);
p=p->next;
}
printf("\n");
}
void main()
{
Stack *S;
//int item;
S=InitStack();
S->next;
Push(S);
OutputStack(S);
//GetTop(&S,item);
//printf("%d\n",item);
//Pop(&S);
//OutputStack(&S);
}

热点内容
内置存储卡可以拆吗 发布:2025-05-18 04:16:35 浏览:335
编译原理课时设置 发布:2025-05-18 04:13:28 浏览:377
linux中进入ip地址服务器 发布:2025-05-18 04:11:21 浏览:612
java用什么软件写 发布:2025-05-18 03:56:19 浏览:31
linux配置vim编译c 发布:2025-05-18 03:55:07 浏览:107
砸百鬼脚本 发布:2025-05-18 03:53:34 浏览:942
安卓手机如何拍视频和苹果一样 发布:2025-05-18 03:40:47 浏览:739
为什么安卓手机连不上苹果7热点 发布:2025-05-18 03:40:13 浏览:802
网卡访问 发布:2025-05-18 03:35:04 浏览:510
接收和发送服务器地址 发布:2025-05-18 03:33:48 浏览:371