㈠ 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);
}