当前位置:首页 » 参考文献 » 链栈引用型

链栈引用型

发布时间: 2021-02-28 17:26:43

⑴ 数据结构-链栈-进栈问题

首先来这个函数的第一个参数有点问题源,应该是 LiStack *s。

它的内容很简单。
s是指向LiStack类型的指针,p也是。p->next=s->next的意思就是把s后面的的一个LiStack结点放到p的后面去了,然后s->next=p,的意思就是把p连接在s的后面。总的意思就是生成了一个新结点p,然后把p插入在s的后面。
你弄不清楚可能是因为你没有搞清楚LiStack的结构,这应该是一个结构体,然后里面有一个自引用的指针成员变量next。就像这样的,LiStack *next;
在纸上画画图会很清晰的,把这些结点都画一画,一下就懂了。

⑵ 链栈的问题,想要有详细过程

能不能把你的问题表达清楚了

⑶ 链栈结构代码中typedef struct LinkStackPtr中的LinkStackPtr是什么意思

C语言代码中,typedef用于定义一个派生的新类型。对于结构的typedef语法基本是:内

typedef struct name_1
{
...
} name_2;

就是把name_2定义成:“struct name_1”。容

如果name_2的前面有个“*”,那实际就是把name_2定义成:“struct name_1 *”。

你所列的代码中,

typedef struct StackNode
{
...
}*LinkStackPtr;

说明LinkStackPtr已经被定义成:“struct StackNode *”,即struct StackNode的指针。
所以下一个定义:

typedef struct LinkStackPtr
{
LinkStackPtr top;
int count;
}LinkStack;

其中LinkStackPtr就是刚才定义的“struct StackNode *”,即struct StackNode的指针。

这样,就把struct StackNode的指针嵌入到LinkStack的结构中了。

希望我说明白了。有问题继续交流。谢谢

⑷ 设链栈的类型定义如下,请写出入栈的算法

这是我写的,希望可以帮助你。代码可以直接运行。
/*实验目的:掌握栈的链式存储结构,实现链栈的初始化、创建、入栈、出栈等操作在链式存储结构上的实现。
实验任务:利用带头结点的链栈,实现十进制到八进制的转换。
*/
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;
}linkstack;
void convert(datatype num)
{
if(num)
{
convert(num/8);
printf("%d",num%8);
}
}

linkstack *init(linkstack *init)
{
//生成头结点
init=(struct node *)malloc(sizeof(linkstack));
init->data=2012;
init->next=NULL;
printf("初始化完成\n");
return init;
}
//入栈
linkstack *push_stack(linkstack *push)
{
datatype y=0;
scanf("%d",&y);
while(y!=-1)
{
linkstack *new;
new=(struct node *)malloc(sizeof(linkstack));
new->data=y;
new->next=push->next;
push->next=new;
scanf("%d",&y);
}
return push;
}
//出栈 时输出8进制数
void pull(linkstack *begin)
{

linkstack *start=begin->next;
if(begin->next!=NULL)
{
while(start->next!=NULL)
{
printf("\t%d对应的八进制数是:",start->data);
convert(start->data);
start=start->next;
printf("\n");
}
printf("\t%d对应的八进制数是:",start->data);
convert(start->data);
begin->next=NULL;
printf("\n");
return;
}
else
{
printf("栈为空,无元素可以删除\n");
return;
}
}
//10进制转8进制
datatype order()
{
datatype a=0;
printf("\t\t\t1.入栈\n");
printf("\t\t\t2.出栈\n");
printf("\t\t\t3.退出\n");
printf("selection order:\n");
scanf("%d",&a);
return a;
}
void select()
{
datatype x;
linkstack *p,*q=NULL;
q=init(p);
while(1)
{
x=order();
switch(x)
{
case 1:
printf("输入入栈值,以 -1结束:\n");
q=push_stack(q);
break;
case 2:
pull(q);
break;
default:
system("pause");
exit(1);
break;
}
}
}
datatype main()
{
select();
//linkstack *t=NULL;
//select(t);
return 0;
}

⑸ 1) 1)链栈结点类型定义为: typedef struct node { int

1 思路: 主要是链表的插入和删除操作
2 代码
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node *next;
}node_type;

void push(node_type* &stack, int elem){
node_type*node = (node_type*)malloc(sizeof(node_type));
node->data = elem;
node->next = stack;
stack = node;
}
int pop(node_type* &stack){
int elem = stack->data;
node_type*node = stack;
stack = stack->next;
free(node);
return elem;
}
bool IsEmpty(node_type* stack){
return stack == NULL;
}
void display(node_type*stack){
while (stack){
("%d ", stack->data);
stack = stack->next;
}
puts("");
}
void destroy(node_type*stack){
while (!IsEmpty(stack)){
pop(stack);
}
}
int main(){
puts("(1) 建立空链栈");
node_type*stack = NULL;
puts("\n(2) 调用进栈函数,将从键盘输入的数据元素逐个进栈,输入0结束;");
int num;
scanf("%d", &num);
while (num != 0){
push(stack, num);
scanf("%d", &num);
}
puts("\n(3) 显示进栈后的数据元素");
display(stack);
puts("\n(4) 调用两次出栈函数,显示出栈后的数据元素");
if (!IsEmpty(stack))
printf("%d\n", pop(stack));
if (!IsEmpty(stack))
printf("%d\n", pop(stack));

destroy(stack);
getchar();
getchar();
return 0;
}
3 运行效果

⑹ 用c语言实现链栈时,对于结点所定义的数据类型是什么

一般是用结构体

⑺ 虚心请教关于链栈的小细节的问题,关于自定义函数里面的变量的定义理解。

LinkStack &S,这个其实是个指抄针的指针,
应为袭你要申请内存,
如果不是引用的话,参数传递时,或复制一个S1在堆栈上,s1和s的地址指向是一样的,然后S1指向新开辟的内存地址,但是S没有变。所以不传递引用无法初始化。

LinkStack S,这个只是输出,复制一个S1在堆栈上,但是这个S1是指向LinkStack的,所以可以调用LinkStack的方法字段。

⑻ 链栈如何定义

#define int datatype (此处的int可根据具体情况改为其他内数据类型容)
typedef struct node
{
datatype data;
struct node *next
}linkStack;
linkStack *top;

⑼ 请教一个关于链栈的问题

LinkStack &S,这个其实是个指针的指针,
应为你要申请内存,
如果不是引用的话,内参数传递时,或复制一个容S1在堆栈上,s1和s的地址指向是一样的,然后S1指向新开辟的内存地址,但是S没有变。所以不传递引用无法初始化。

LinkStack S,这个只是输出,复制一个S1在堆栈上,但是这个S1是指向LinkStack的,所以可以调用LinkStack的方法字段。

⑽ 链栈结点存储结构:

其实这个就是链表嘛。。一般书上都有讲的。。第二个struct后面有*,说明next是一个指向SNODE结构体的指针,指向链表下一个元素的地址

链表这个一般人都是学c一个月后才学的,比较难。建议不要急,慢慢学,先把基础打好。

关于你私底下问我的问题,在此也回答

传指针(实际上就是地址。。)的例子
int p; (假设开辟空间时p 被分配给了3001H、3002H 两个位置)
p=2003;
那么&p就是3001H这个地址

引用的例子:
int a;
int &ra=a; //定义引用ra,它是变量a的引用,即别名

其实更好的例子在谭浩强书上有,不过我现在手头上没带书。。

热点内容
涂鸦论文 发布:2021-03-31 13:04:48 浏览:698
手机数据库应用 发布:2021-03-31 13:04:28 浏览:353
版面217 发布:2021-03-31 13:04:18 浏览:587
知网不查的资源 发布:2021-03-31 13:03:43 浏览:713
基金赎回参考 发布:2021-03-31 13:02:08 浏览:489
悬疑故事范文 发布:2021-03-31 13:02:07 浏览:87
做简单的自我介绍范文 发布:2021-03-31 13:01:48 浏览:537
战略地图参考 发布:2021-03-31 13:01:09 浏览:463
收支模板 发布:2021-03-31 13:00:43 浏览:17
电气学术会议 发布:2021-03-31 13:00:32 浏览:731