當前位置:首頁 » 編程語言 » 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);
}