C/C++數(shù)據(jù)結(jié)構(gòu)知識教程:棧和隊列!大學(xué)數(shù)據(jù)結(jié)構(gòu)課程又一難題,90分鐘詳細(xì)講解




這里兩種方法不懂的話可以看看我的另一個筆記:C語言入門教程 第12講 結(jié)構(gòu)體
代碼見附錄
-----待續(xù)。。。。。。
#include?<stdio.h>
#include?<stdlib.h>
struct?Node?{
????int?data;
????struct?Node*next;
};
struct?stack?{
????struct?Node*stackTop;????//棧頂標(biāo)i記
????int?size;????????????????//棧中元素個數(shù)
};
//創(chuàng)建結(jié)點
struct?Node?*createNode(int?data)?{
????struct?Node*newNode?=?(struct?Node*)malloc(sizeof(struct?Node));
????newNode->data?=?data;
????newNode->next?=?NULL;
????return?newNode;
};
//創(chuàng)建棧,就是創(chuàng)建一個struct?stack的變量
struct?stack*createstack()?{
????//創(chuàng)建過程就是初始化過程
????struct?stack*myStack?=?(struct?stack*)malloc(sizeof(struct?stack));
????myStack->stackTop?=?NULL;
????myStack->size?=?0;
????return?myStack;
}
//寫?數(shù)的方式-->自己寫代碼的思維
void?push(struct?stack?*myStack,?int?data)?{
????//插入的這個結(jié)點創(chuàng)建出來
????struct?Node?*newNode?=?createNode(data);
????//入棧操作就是鏈表表頭插入
????newNode->next?=?myStack->stackTop;
????myStack->stackTop?=?newNode;
????myStack->size++;
}
//獲取棧頂元素
int?top(struct?stack*myStack)?{
????//防御編程
????if?(myStack->size?==?0)?{
????????printf("棧為NULL,無法獲取棧頂元素!\n");
????????system("pause");
????????return?myStack->size;
????}
????return?myStack->stackTop->data;
}
//出棧
void?pop(struct?stack*myStack)?{
????if?(myStack->?size?==?0)?{
????????printf("棧為NULL,無法出棧!\n");
????????system("pause");
????}?else?{
????????struct?Node*nextNode?=?myStack->stackTop->next;
????????free(myStack->stackTop);
????????myStack->stackTop?=?nextNode;
????????myStack->size--;
????}
}
//萬金油函數(shù)
int?empty(struct?stack*myStack)
{
????if?(myStack->size?==0)
????????return?0;
????return?1;
}
int?main()
{
????struct?stack*myStack=createstack();
????push(myStack,1);
????push(myStack,2);
????push(myStack,3);
????while?(empty(myStack))
????{????????printf("%d\t",top(myStack));
????pop(myStack);
????}
????printf("\n");
????system("pause");
????return?0;
}
???