国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

鏈棧(入棧,出棧,遍歷)

這篇具有很好參考價值的文章主要介紹了鏈棧(入棧,出棧,遍歷)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、鏈棧概述

1.為什么要用鏈棧?

鏈式存儲結構可以更好的避免棧上溢,因為順序棧在定義結構體時需要定義最大值。

2.什么是鏈棧

棧的鏈式存儲結構就是鏈棧,棧底就是鏈表的最后一個結點,而棧頂是鏈表的第一個結點,一個鏈??梢杂蓷m斨羔榯op唯一確定。

結構體的定義:

#include<stdio.h>
#include<stdlib.h>
typedef struct Stack{
	int data;
	struct Stack *next;
}*LStack;

二、基本操作

//初始化鏈棧 
 int Init(LStack &top){
 	top=(Stack *)malloc(sizeof(Stack));
 	if(top==NULL){
 		printf("申請內存失敗\n");
 		return -1;
	 }
	 top->next=NULL;
 	return 1;
 }
 //入棧
  int pushLstack(LStack &top,int e){
  	LStack s;
  	s=(Stack *)malloc(sizeof(Stack));  //申請結點 
  	if(s==NULL){
  		printf("申請失敗!");
  		return -1;
	  }
	s->data=e;                         //接收數(shù)據(jù) 
	s->next=top->next;                 //類似尾插鏈表 
	top->next=s;
	return 1; 
  } 
//出棧
 int popLstack(LStack  &top){
 	LStack p;
 	if(top->next==NULL){
 		printf("棧空!");
 		return 0;
	 } 
	p=top->next;
	top->next=p->next;
	printf("%d出棧\n",p->data);
	free(p); 
	return 1;
 }
 //打印棧
int  printLstack(LStack top){
 	if(top==NULL){
 		printf("???\n");
 		return 0;
	 }
	 LStack p=top->next;
	 while(p){
	 	printf("%d ",p->data);
	 	p=p->next;
	 }
	 }
 int main(){
 	LStack L;
 	Init(L);                   //初始化 
 	int n,a;
 	printf("請輸入進棧元素總數(shù):");
 	scanf("%d",&n);
 	for(int i=1;i<=n;i++){
 		printf("請輸入第%d個元素:",i);
 		scanf("%d",&a);
 		pushLstack(L,a);        //for循環(huán)進棧 
	 }
	 printf("此時棧序列為:");
	printLstack(L);             //打印 
	printf("\n");
	popLstack(L);               //出棧 
	popLstack(L);               //出棧
    printf("\n此時棧序列為:");
 	printLstack(L);             //打印
}

運行結果:

鏈棧,數(shù)據(jù)結構與算法(C語言),鏈表,數(shù)據(jù)結構

?三、多重鏈棧

?多重鏈棧用到結構體數(shù)組這一個點。

結構體數(shù)組的定義:

1.先聲明結構體,再去定義結構體數(shù)組

struct 結構體名{
    成員列表;
};
struct 結構體名 數(shù)組名[長度] ;

2.聲明結構體的同時去定義結構體數(shù)組(結構體名可以省略).

struct 結構體名{
    成員列表;
}數(shù)組名[長度];

結構體數(shù)組的引用:

1.變量類型引用。

?通過:結構數(shù)組名[ ].成員變量?? 來進行操作。

struct Day{
    int  year;
    int  mouth;
    int  day;
}stu[2];
Day[1].year=2022;
Day[1].mouth=2;
Day[1].day=7;

2.指針類型。

通過:結構數(shù)組名[ ]->成員變量來操作

typedef struct Stack{
	int data;
	struct Stack *next;
}*LStack;
 struct Stack *top[3];
top[?]->next=?
top[?]->data=?

多重鏈表操作:

//多重入棧 
void pushs( Stack *top[3],int i,int x){          //i 代表要對哪一個棧進行入棧,x 是輸入的值
	Stack *p=(Stack *)malloc(sizeof(Stack));
	p->data=x;
	p->next=top[i]->next;
	top[i]->next=p;
 }
 //多重出棧
void pops( Stack *top[3],int i){
	if(top[i]->next==NULL){
		printf("??眨?);
	}
	Stack *p=top[i]->next;
	top[i]->next=p->next;
	printf("%d出棧 ",p->data);
	free(p);
} 
 //打印棧
int  prints( Stack *top[3],int i){
 	if(top[i]==NULL){
 		printf("???\n");
 		return 0;
	 }
	 LStack p=top[i]->next;
	 while(p){
	 	printf("%d ",p->data);
	 	p=p->next;
	 }
	 }

//main函數(shù)執(zhí)行對于【1】棧的操作,其他的同理

int main(){
 	LStack top[3];                //聲明
 	Init(top[3]);                 //初始化
 	pushs(&top[3],1,1);           //1棧進 1-3
 	pushs(&top[3],1,2);
 	pushs(&top[3],1,3);
 	printf("\n此時1棧的序列為:");
 	prints(&top[3],1);              //輸出
 	printf("\n");
 	pops(&top[3],1);              //1棧出棧
 	printf("\n此時1棧的序列為:"); 
 	prints(&top[3],1);            //輸出
 }

運行結果:(說明問題即可)

鏈棧,數(shù)據(jù)結構與算法(C語言),鏈表,數(shù)據(jù)結構文章來源地址http://www.zghlxwxcb.cn/news/detail-734665.html

到了這里,關于鏈棧(入棧,出棧,遍歷)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【數(shù)據(jù)結構】順序棧的基本操作:出棧、入棧、取棧頂元素、輸出所有棧中元素、括號匹配題目

    【數(shù)據(jù)結構】順序棧的基本操作:出棧、入棧、取棧頂元素、輸出所有棧中元素、括號匹配題目

    棧是限定僅在表位進行插入或刪除操作的線性表。棧的表尾稱為棧頂,表頭稱為棧底。不含元素的棧稱為空棧。 左圖為棧的示意圖,右圖為用鐵路調度表示棧。 如下是入棧至棧滿再進行出棧的過程示意圖。值得注意的是,棧滿后,top指針指向的不是頂端元素,而是頂端的下

    2024年02月07日
    瀏覽(26)
  • 【數(shù)據(jù)結構】線性表(六)堆棧:順序棧及其基本操作(初始化、判空、判滿、入棧、出棧、存取棧頂元素、清空棧)

    【數(shù)據(jù)結構】線性表(六)堆棧:順序棧及其基本操作(初始化、判空、判滿、入棧、出棧、存取棧頂元素、清空棧)

    ?? 堆棧Stack 和 隊列Queue 是兩種非常重要的數(shù)據(jù)結構,兩者都是特殊的線性表: 對于堆棧,所有的插入和刪除(以至幾乎所有的存?。┒际窃诒淼耐欢诉M行 對于隊列,所有的插入都是在表的一端進行,所有的刪除(以至幾乎所有的存?。┒际窃诒淼牧硪欢诉M行。 ?? 堆

    2024年02月07日
    瀏覽(23)
  • 【數(shù)據(jù)結構練習題】?!?.括號匹配 2.逆波蘭表達式求值 3.出棧入棧次序匹配 4.最小棧

    【數(shù)據(jù)結構練習題】?!?.括號匹配 2.逆波蘭表達式求值 3.出棧入棧次序匹配 4.最小棧

    ?????個人主頁????? ?????數(shù)據(jù)結構練習題總結專欄????? 在學習數(shù)據(jù)結構的過程中遇到了各種各樣類型的題目,我在解答這些題目的時候收獲了不少,所以我想開設一個專欄來分享我平時做題的收獲,在我分享的題中我采用三步法來闡述,希望大家可

    2024年04月09日
    瀏覽(25)
  • 順序棧的基本操作(存儲結構設計、初始化、判空、判滿、入棧、出棧、取棧頂元素、遍歷輸出棧內元素)

    順序棧的基本操作(存儲結構設計、初始化、判空、判滿、入棧、出棧、取棧頂元素、遍歷輸出棧內元素)

    以上為總的代碼,對于棧滿時存在一些問題待改進 ———————————————————————————————————————— 以下為代碼編寫過程,有參考網上大佬的代碼 ? 創(chuàng)建棧后報錯,在scanf_s處缺少符號? 會執(zhí)行兩遍創(chuàng)建棧? ? 在主函數(shù)里邊確實有兩

    2024年02月05日
    瀏覽(24)
  • 【數(shù)據(jù)結構】C語言實現(xiàn)鏈棧

    【數(shù)據(jù)結構】C語言實現(xiàn)鏈棧

    大家好,很高興又和大家見面啦?。?! 在上一篇內容中,我們簡單介紹了一下如何解決順序??臻g不夠的方法: 在創(chuàng)建順序棧前,提前在空間內容申請一篇足夠大的空間; 創(chuàng)建一個動態(tài)的鏈棧; 當我們使用第一種方式時,如果我們此時需要創(chuàng)建的是兩個同類型的順序棧,那

    2024年01月23日
    瀏覽(17)
  • 數(shù)據(jù)結構:鏈棧(含完整代碼,可復制)

    ? ? ? ?鏈棧是采用鏈式存儲結構實現(xiàn)的棧,通常用單鏈表來表示。鏈棧的優(yōu)點是不存在棧滿上溢的情況(只有在內存溢出時才會出現(xiàn)棧滿,通常不考慮)。鏈棧的棧頂是鏈表的第一個結點,棧底是鏈表的最后一個結點,一個鏈棧可以由棧頂指針唯一確定。鏈棧的每個結點都

    2024年02月01日
    瀏覽(17)
  • 【數(shù)據(jù)結構】鏈棧的基本操作(C語言)

    零零總總搜索了一些關于鏈棧的資料,了解了鏈棧的基本操作,一直覺得別人寫的代碼或多或少存在一些問題,所以打算自己寫一篇關于鏈棧的文章,也算是對所學知識的梳理和鞏固了。 首先說明本文使用C語言進行鏈棧的基本操作,鏈棧是無頭結點的。這里補充說明一下,

    2024年02月05日
    瀏覽(25)
  • 【算法】遞歸解決各種數(shù)據(jù)結構的遍歷問題

    對于遞歸算法,我們最先想到的應該就是用遞歸的方式去中序遍歷一棵樹,遞歸的使用使得我們可以先深入到下層中,然后慢慢的輸出下層的元素之后輸出上層元素。 因此,基于此,我們甚至可以使用遞歸來逆序輸出一個棧,鏈表等數(shù)據(jù)結構。 使用遞歸輸出樹 使用遞歸逆序

    2024年02月08日
    瀏覽(17)
  • 數(shù)據(jù)結構與算法-二叉樹的遍歷

    數(shù)據(jù)結構與算法-二叉樹的遍歷

    ?? “少年沒有烏托邦,心向遠方自明朗!” 二叉樹的遍歷是按照一定次序訪問二叉樹中的所有結點,且每個結點僅被訪問一次的過程。遍歷線性結構是容易解決的,而二叉樹的結構是非線性結構,需要尋找規(guī)律,使二叉樹的結點排列在一個線性隊列上,便于遍歷。 由二叉樹

    2024年02月08日
    瀏覽(34)
  • 【數(shù)據(jù)結構】 鏈棧的基本操作 (C語言版)

    【數(shù)據(jù)結構】 鏈棧的基本操作 (C語言版)

    目錄 一、鏈棧 1、鏈棧的定義: 2、鏈棧的優(yōu)缺點: 二、鏈棧的基本操作算法(C語言)???? 1、宏定義 ??2、創(chuàng)建結構體 3、鏈棧的初始化? ?4、鏈棧的進棧 5、鏈棧的出棧 6、獲取棧頂元素 7、棧的遍歷輸出 8、鏈棧的判空 ?9、求鏈棧的棧長 10、鏈棧的清空 11、鏈棧的銷毀

    2024年01月24日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包