当前位置:首页 » 编程语言 » c语言链栈遍历输出
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言链栈遍历输出

发布时间: 2022-08-10 11:27:10

c语言链栈问题,输出结果只有

#include"stdio.h"

#include"malloc.h"

#include"stdlib.h"

typedefstructstack{

chardata;

structstack*next;

}linkstack;

linkstack*init(linkstack*s){

s->next=NULL;

returns;

}

linkstack*push(linkstack*s,charx){

linkstack*p;

p=(linkstack*)malloc(sizeof(linkstack));

if(!p)

{

printf("进栈分配失败 ");

exit(1);

}

else

{

p->data=x;

p->next=NULL;

p->next=s;

s=p;

}

returns;

}

linkstack*pop(linkstack*s){

linkstack*q;

if(s==NULL)

{

printf("出栈时栈空 ");

exit(1);

}

q=s;

s=s->next;

free(q);

returns;

}

chartop(linkstack*s){

if(s==NULL)

{

printf("栈空 ");

exit(1);

}

returns->data;

}

voidmain(){

linkstack*s;

charx,a;

s=(linkstack*)malloc(sizeof(linkstack));

s=init(s);

printf("请输入要创建的元素 ");

x=getchar();

while(x!=' ')

{

s=push(s,x);

x=getchar();

}

while(s->next!=NULL)

{

a=top(s);

s=pop(s);

printf("出栈结果:%c ",a);

}

printf(" ");

}

㈡ 如何用c语言输出整个单链表中的数据

单链表中头结点有两个作用:一是标识该链表的存在,而是可以通过头结点遍历整个链表。所以不能通过移动头结点指针遍历链表,因为一旦移动了,下次就无法定位该链表了!
void dispList(LinkList *L)
{
LinkList *p=L->next;//定义一个结点指针p指向头结点的下一个结点
while(p){ //如果p不为空则循环
printf("%d",p->data);
p=p->next;//移动指针p遍历链表
}
}

㈢ C语言解决链栈

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

typedefintDataType;
typedefstructnode{
DataTypedata;
structnode*next;
}Node,*Stack,*ps;

StackGetEmptyStack(){
Stacks=(ps)malloc(sizeof(Node));
s->next=NULL;
returns;
}

voidInitStack(Stack&s){//链栈初始化
s=(ps)malloc(sizeof(Node));//配置头结点方便后续操作
s->next=NULL;

}

voidDestroyStack(Stacks){//销毁链栈
psq,p=s->next;
while(p) {//依次释放链栈的每一个结点
q=p;
p=p->next;
free(q);
//p=s;
}
free(s);//最后删除头结点
}

voidPush(Stack&s,DataTypex){//入栈操作
pst=(ps)malloc(sizeof(Node));
t->data=x;
t->next=s->next;
s->next=t;
}

intEmpty(Stacks){
return(s->next==NULL);
}

intPop(Stacks,DataType*ptr){
psp;
if(Empty(s)){
printf("下溢错误,删除失败。 ");
ptr=NULL;
return0;//0返回值时,ptr指向的内容不可用
}
p=s->next;
*ptr=p->data;//存取要删除的栈顶元素
s->next=p->next;//头指针指向下一个数据结点
free(p);
return1;
}

intGetTop(Stacks,DataType*ptr){//取栈顶元素
if(Empty(s)){
printf("下溢错误。 ");
return0;
}
*ptr=s->next->data;
return1;
}

intmain(){
DataTypex;
Stacks=GetEmptyStack();//定义链栈的栈顶指针并初始化
// InitStack(s);//指针相当于一个地址&
printf("对15和10进行入栈操作 ");
Push(s,15);
Push(s,10);
if(GetTop(s,&x))printf("当前栈顶元素为:%d ",x);//输出当前栈顶元素10
if(Pop(s,&x))printf("执行一次出栈操作,等同于删除栈顶元素:%d ",x);//输出出栈元素10
if(GetTop(s,&x))printf("现在的栈顶元素为:%d ",x);//输出当前栈顶元素15
printf("请输入待插元素:");
scanf("%d",&x);
Push(s,x);
if(Empty(s))printf("栈为空。 ");
elseprintf("栈并不为空。 ");
return0;
}

㈣ c语言遍历如何输出

您好,每一个节点,都视为有下-左-右3个关键点(相当于人的双手和头),遍历的时候,从根节点向左子树开始描线,紧贴树枝(就是紧贴边缘),直到遍历线从右子树回到答根节点结束
先序:每当遍历线遇到"下"关键点,则输出这个节点;
中序:每当遍历线遇到"左"关键点,则输出这个节点;
后序:每当遍历线遇到"右"关键点,则输出这个节点;
再通俗点,先把节点用圈圈圈起来,再用线连起来,然后描线,描线你懂吧,在线上画线!先序:当你描的线第一次经过节点的时候,就输出(输出一次后就不再输出了)中序:当你描的线第二次经过节点的时候,才输出,第一次经过的时候不输出后序:当你描的线第三次经过节点的时候,才输出,第一次,第二次经过不输出。
c++:
1、CFileFind类实现遍历文件,FindNext()查找下一个文件
2、比较文件后缀,符合要求就写入txt

㈤ 关于数据结构(c语言)链栈的问题

你的while循环写错了,你想借助S遍历,但是循环条件用的还是top,而top在循环内部没有修改,所以就进入死循环了,应该这么改:
while(S!=NULL) //用S
{
printf("%d,\n",S->data);
S=S->next; //S要修改
}

还有,print函数应该是不想修改链栈的吧,只是读取。所以参数就不要用a的地址了,直接用a传递就行了,保证函数体内不会意外修改a。函数参数要做相应的修改。
像这样:都不用额外借助一个S了。
void print(coffee *top)
{
top=top->next;
while(top!=NULL)
{
printf("%d,\n",top->data);
top=top->next; //top要修改
}
}
用print(a);调用就好了。

有问题Hi联系。

㈥ 急!用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语言实现基本操作

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#definestack_init_size20
#defineincreasesize10;
typedefintElemType;
typedefstructnode{
ElemType*base;
ElemType*top;
intsize;
}stack;

voidcreat(stack*s)
{
s->base=(ElemType*)malloc(sizeof(ElemType));
if(!s->base)
{
exit(0);
}
s->base=s->top;
s->size=stack_init_size;
}

voidpush(stack*s,ElemTypee)
{
if(s->top-s->base>=s->size)
{
s->base=(ElemType*)realloc(s->base,(s->size+increasesize)*sizeof(ElemType));
if(!s->base)
{
exit(0);
}
s->top=s->base+s->size;
s->size+=increasesize;
}
*(s->top)=e;
s->top++;
}

voidpop(stack*s,ElemType*e)
{
if(s->top==s->base)
{
return;
}
*e=*--(s->top);
}
intstacklen(stacks)
{
return(s.top-s.base);
}
intmain()
{
stacks;
intn;
ElemTypee1,e2,d;
inti=1,j=1;
push(&s,i);
push(&s,j);
scanf("%d",&n);
while(n--)
{
pop(&s,&e1);
pop(&s,&e2);
d=e1+e2;
push(&s,e2);
push(&s,d);
}
pop(&s,&d);
printf("%d",d);
return0;
}

㈧ C语言链栈问题

#include<stdio.h>
#include<malloc.h>
#define null 0
typedef struct node
{
int data;
struct node *next;
}linkstack;
linkstack *top;

/*linkstack *initstack(linkstack *top) //初始化栈将栈的数据设空//
{
top->next=null;
return top;
} 这个函数没必要。return (top->next==null);也是错的。*/

linkstack *push(linkstack *top,int x) ////入栈
{
linkstack *p;
p=(linkstack*)malloc(sizeof(linkstack));
p->data=x;
p->next=top;////要理解栈的结构,栈顶是链表的头部,所以p->next要指向即时的top////
top=p;
return top;
}

linkstack* pop(linkstack *top) //出栈
{
linkstack *p;
if(!top)
{
printf("空链栈");
return null;
}
p=top;
top=top->next;
free(p); //释放存储空间
return top;
}

void print(linkstack *top) //输出栈
{
linkstack *p;
p=top;
while(p!=null) ////刚开始栈顶的next项为空////
{
printf("%d\n",p->data);
p=p->next;
}
}

void main()
{
int x,i;
top=(linkstack*) malloc(sizeof(linkstack));
scanf("%d",&x);
top->data=x;//头部赋值。
top->next=null;
// initstack(top);
for(i=1;i<=3;i++)
{
scanf("%d",&x);
top=push(top,x);//返回一个指针。
}
print(top);
top=pop(top);//返回一个指针。
print(top);
}