⑴ c語言數據結構(鏈式棧)
你這個不是鏈式的吧?
⑵ C語言 棧的鏈式存儲結構,為什麼不能出棧
你的函數stacknotempty有問題,返回的值與字面意思反了,一般棧操作習慣用stackEmpty來做判斷,你在stacknotempty中,堆棧為空卻返回了1。
⑶ 急!用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語言
https://..com/question/310602180072679244.html
借題 求幫忙做一道題🙏
對不住了
⑸ 如何用C語言創建一個鏈棧,並進行操作
1 思路: 主要是鏈表的插入和刪除操作
2 代碼
#include<stdio.h>
#include<stdlib.h>
typedefstructnode
{
intdata;
structnode*next;
}node_type;
voidpush(node_type*&stack,intelem){
node_type*node=(node_type*)malloc(sizeof(node_type));
node->data=elem;
node->next=stack;
stack=node;
}
intpop(node_type*&stack){
intelem=stack->data;
node_type*node=stack;
stack=stack->next;
free(node);
returnelem;
}
boolIsEmpty(node_type*stack){
returnstack==NULL;
}
voiddisplay(node_type*stack){
while(stack){
printf("%d",stack->data);
stack=stack->next;
}
puts("");
}
voiddestroy(node_type*stack){
while(!IsEmpty(stack)){
pop(stack);
}
}
intmain(){
puts("(1)建立空鏈棧");
node_type*stack=NULL;
puts(" (2)調用進棧函數,將從鍵盤輸入的數據元素逐個進棧,輸入0結束;");
intnum;
scanf("%d",&num);
while(num!=0){
push(stack,num);
scanf("%d",&num);
}
puts(" (3)顯示進棧後的數據元素");
display(stack);
puts(" (4)調用兩次出棧函數,顯示出棧後的數據元素");
if(!IsEmpty(stack))
printf("%d ",pop(stack));
if(!IsEmpty(stack))
printf("%d ",pop(stack));
destroy(stack);
getchar();
getchar();
return0;
}
3 運行效果
⑹ 計算機c語言中 什麼是棧和隊列
棧(Stack)是僅限制在表的一端進行插入和刪除運算的線性表,稱插入、刪除這一端為棧頂,另一端稱為棧底。表中無元素時為空棧。棧 的修改是按後進先出的原則進行的,我們又稱棧為LIFO表(Last In First Out)。通常棧有順序棧和鏈棧兩種存儲結構。 棧的基本運算有六種: ·構造空棧:InitStack(S) ·判棧空: StackEmpty(S) ·判棧滿: StackFull(S) ·進棧: Push(S,x) ·退棧: Pop(S) ·取棧頂元素:StackTop(S) 在順序棧中有"上溢"和"下溢"的現象。 ·"上溢"是棧頂指針指出棧的外面是出錯狀態。 ·"下溢"可以表示棧為空棧,因此用來作為控制轉移的條件。 順序棧中的基本操作有六種:·構造空棧·判棧空·判棧滿·進棧·退棧·取棧頂元素 鏈棧則沒有上溢的限制,因此進棧不要判棧滿。鏈棧不需要在頭部附加頭結點,只要有鏈表的頭指針就可以了。 鏈棧中的基本操作有五種:·構造空棧·判棧空·進棧·退棧·取棧頂元素 隊列(Queue)是一種運算受限的線性表,插入在表的一端進行,而刪除在表的另一端進行,允許刪除的一端稱為隊頭(front),允許插入的 一端稱為隊尾(rear) ,隊列的操作原則是先進先出的,又稱作FIFO表(First In First Out) 。隊列也有順序存儲和鏈式存儲兩種存儲結 構。 隊列的基本運算有六種: ·置空隊:InitQueue(Q) ·判隊空:QueueEmpty(Q) ·判隊滿:QueueFull(Q) ·入隊:EnQueue(Q,x) ·出隊:DeQueue(Q) ·取隊頭元素:QueueFront(Q) 順序隊列的"假上溢"現象:由於頭尾指針不斷前移,超出向量空間。這時整個向量空間及隊列是空的卻產生了"上溢"現象。 為了克服"假上溢"現象引入循環向量的概念,是把向量空間形成一個頭尾相接的環形,這時隊列稱循環隊列。 判定循環隊列是空還是滿,方法有三種: ·一種是另設一個布爾變數來判斷; ·第二種是少用一個元素空間,入隊時先測試((rear+1)%m = front)? 滿:空; ·第三種就是用一個計數器記錄隊列中的元素的總數。 隊列的鏈式存儲結構稱為鏈隊列,一個鏈隊列就是一個操作受限的單鏈表。為了便於在表尾進行插入(入隊)的操作,在表尾增加一個尾指 針,一個鏈隊列就由一個頭指針和一個尾指針唯一地確定。鏈隊列不存在隊滿和上溢的問題。在鏈隊列的出隊演算法中,要注意當原隊中只 有一個結點時,出隊後要同進修改頭尾指針並使隊列變空。
⑺ C語言數據結構鏈式棧問題
//既然是演算法就不用源碼了具體看注釋
typedefintDatatype;
typedefstructqueuenode
{
Datatypedata;
structqueuenode*next;
}QueueNode;//以上是結點類型的定義
typedefstruct
{
queuenoderear;
}LinkQueue;//只設一個指向隊尾元素的指針
voidInitQueue(LinkQueue
⑻ 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);
}
⑼ C語言鏈式存儲棧的建棧、入棧、出棧、列印
你在main里調用InitStack初始化棧,後面就可以Push Pop進出了
⑽ 鏈棧如何構造,鏈棧新結點如何進棧
鏈式棧就是用鏈式存儲結構表示一個棧,也就是指針域。
根據棧的性質,知道棧是先進後出,所以只需要設置一個棧頂指針,還是說點C++吧
先構造一個結構模板
template<class
ElemType>
typedef
struct
Node
//建立
{
ElemType
data;//數據成員,用於存儲
struct
Node*next;//指針成員,用於連接邏輯結構
}LNode;
1.構造一個空棧,只需要:
LNode*head;//定義棧頂指針
head=(LNode*)malloc(sizeof(LNode));//分配空間
head->next=NULL;//下一個為空
2.新節點:比如新節點數據位1
入棧操作:
LNode*p;
p->data=1;
p->next=head;
head=p;
總之有點類似C語言里的鏈表
還有什麼不清楚的可以追問
希望對你有所幫助!!!