1. 程式人生 > >入棧出棧遍歷棧C語言程式

入棧出棧遍歷棧C語言程式

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

typedef struct Node
{
	int data;
	struct Node * pNext;
}NODE,* PNODE;

typedef struct Stack
{
	PNODE pTop;
	PNODE pBottom;
}STACK,* PSTACK;


void init(PSTACK);
void pop(PSTACK ps, int *pval);
bool empty(PSTACK ps);
void traverse(PSTACK ps);
void clear(PSTACK ps);
void push(PSTACK ps,int val);
int main()
{
	STACK s;
	int val;
    init(&s);
	push(&s,1);
	push(&s,2);
	push(&s,3);
	push(&s,4);
	push(&s,5);
	push(&s,6);
	traverse(&s);
	pop(&s,&val);
	printf("出棧的元素值是: %d\n",val);
	traverse(&s);
	clear(&s);
	traverse(&s);
	return 0;
}

void init(PSTACK ps)
{
	ps->pTop = (PNODE)malloc(sizeof(NODE));
	if(NULL == ps->pTop)
	{
		printf("動態記憶體分配失敗!\n");
		exit(-1);
	}
	else
	{
		ps->pBottom = ps->pTop;
		ps->pTop->pNext = NULL;
	}
}

bool empty(PSTACK ps)
{
	if(ps->pTop == ps->pBottom)
		return true;
	else
		return false;
}

void push(PSTACK ps,int val)
{
	PNODE pNew = (PNODE)malloc(sizeof(NODE));
	pNew->data = val;
	pNew->pNext = ps->pTop;
	ps->pTop = pNew;
}

void pop(PSTACK ps, int *pval)
{
	if(empty(ps))
	{
		return ;//不能寫return true,因為void無返回值
	}
	else
	{
		PNODE r = ps->pTop;
		*pval = r->data;
		ps->pTop = r->pNext;
		free(r);
		r = NULL;
		return;
	}
}

void traverse(PSTACK ps)
{
	PNODE p = ps->pTop;
	while(p != ps->pBottom)
	{
		printf("%d ",p->data);
		p = p->pNext;
	}
	printf("\n");
	return;
}

void clear(PSTACK ps)
{
	if(empty(ps))
	{
		return;
	}
	else
	{
		PNODE p = ps->pTop;
		PNODE q = NULL;
		while(p != ps->pBottom)
		{
			q = p->pNext;
			free(p);
			p = q;
		}
		ps->pBottom = ps->pTop;
	}
}


相關推薦

03鄰接矩陣的深度和廣度C語言實現

返回 算法 ++ 其它 連通圖 edge main fin site #include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h" #define

[linux]二叉樹的建立及其遞迴C語言實現)

基礎知識 二叉樹的特點: 每一個節點最多有兩棵子樹,所以二叉樹中不存在度大於2的節點,注意,是最多有兩棵,沒有也是可以的 左子樹和右子樹是有順序的,次序不能顛倒,這點可以在哈夫曼編碼中體現, 順序不同編碼方式不同 -即使樹中某個節點中只有一個子樹的花,也要區分它是左子樹還是右子樹

二叉樹的建立及其遞迴C語言實現)

最近在學習資料結構中樹的概念,遲遲不得入門,應該是自己的懶惰和沒有勤加練習導致的,以後應該多加練習 以下是我對二叉樹的一些總結內容 二叉樹的特點有: - 每一個節點最多有兩棵子樹,所以二叉樹中不存在度大於2的節點,注意,是最多有兩棵,沒有也是可以的 左子

利用鏈式佇列實現二叉樹的層次C語言

規則: 判斷樹是否為空,為空則返回; 若不空,從樹的第一層。也就是根節點開始訪問。 從上而下逐層遍歷, 在同一層中,按從左到右的順序對節點逐個訪問。 #include<stdio.h> #include<stdlib.h> t

二叉樹的C語言)(資料結構)

二叉樹的基本操作  按前輩們的說法,在嵌入式的開發中並不用得到二叉樹。在次就僅僅對二叉樹的基本操作作簡單介紹。 二叉樹性質  (1)第 i 層最多有 2^(i-1) 個節點。 (2)深度為 k 的二叉樹至多有 2^k - 1 個節點。 (3)若一個二叉樹終端節點個數

二叉樹的建立與c語言實現)

#include <stdio.h> #include <stdlib.h> typedef int ElemType; //這裡用int 作為樹結點的資料 typedef

二叉樹層次C語言實現)

經過兩天長時間的學習, 通過研究佇列以及二叉樹的相關性質,終於寫出了二叉樹的層次遍歷。 該實現的核心就是使用佇列,每次把訪問到的節點的左右子樹放到佇列裡面去,出隊的時候同樣操作! 感謝@原來如此 , @AlexMok ,兩位同學,在小組相互學習的過程中收穫良

C語言程式

#include<stdio.h> #include<malloc.h> #include<stdlib.h> typedef struct Node { int data; struct Node * pNext; }NODE,*

順序的概念,初始化,回收,,返回頂,

/*棧,是限定在僅在隊尾進行插入或刪除操作的線性表,因此對於棧來說,表尾端有其特殊含義,稱為棧頂 相應地,表頭端稱為棧底。不含元素的空表稱為空棧。 (限定只能在一端(棧頂)進行操作(入棧和出棧)的線性表,稱之為棧) S=(a1,a2,a3---,an)---a1成為棧底,an

合法性檢驗,C/C++語言程式

“棧.h” #include<stdio.h> #include<stdlib.h> #define A 40 typedef int Datatype; typedef struct Stack{     Datatype stack_array

資料結構——,佇列相關操作(C語言實現)

閱讀過程之中可能會花費比較多的時間:建議直接翻到最後,有完整的程式碼可以使用 程式準備工作 #include <stdio.h> #include <malloc.h> #include <stdlib.h> #include<proc

序列的

                                                                       怎麼樣把所有的可能的出棧順序輸出的           在

9.9-全Java筆記:集合的N種方式總結&Collections工具類

java遍歷集合的N種方式總結【示例1】遍歷List方法1,使用普通for循環for(int i=0;i<list.size();i++){ //list為集合的對象名 String temp = (String)list.get(i); System.out.println

Python自學之路:遞迴、和佇列目錄

遞迴呼叫的概念:一個函式呼叫了自身,稱為遞迴呼叫 遞迴函式的概念:一個能夠被自身呼叫的函式稱為遞迴函式 遞迴一般執行的是迴圈邏輯 編寫遞迴函式的方法: 1、找出臨界條件,比如最小值,最大值等等 2、找出這一次和上一次的關係 3、假設當前函式已經能用,呼叫自身計算

Python:通過模擬深度

(一)棧模擬深度遍歷 (1)深度遍歷 (1)模擬遍歷的流程 ! (2)程式碼實現 import os def Demo(path) : stack = [] stack.append(path) #進棧 while len(sta

層次二叉樹和採用的方式二叉樹

//中序遍歷非遞迴 @Override public void inOrderByStack() { System.out.println("中序遍歷非遞迴操作"); //建立棧 Deque<Node> stack=new LinkedList&

利用中序二叉樹

//線序建立二叉樹,然後利用棧中序遍歷  #include"stdlib.h" #include"stdio.h" #include"iostream.h" //***********二叉樹的遍歷*********** typedef char TElemType;

Struts2中ModelDriven的作用以及頂的list,map

把當前的類中實體類物件壓入棧頂 public T getModel() { // TODO Auto-generated method stub returnthis.t; } <s:aac

順序操作的實驗程式碼(C語言

        在做棧的習題,順手把順序棧的操作總結實現了一下,也算很好的複習了一下結構體,結構體指標,過程中還好好的體會了一把除錯的“樂趣”。         開始的時侯卡在用不用指標上了,最後發現C語言不用指

資料結構中用實現表示式求值(c語言實現)

/* 該程式完成了個位數的各類表示式求值 運用了資料結構中的棧及對棧操作的各類函式,操作全用指標完成 如輸入 2+3*(3+3*1)#  輸出結果為 20 經測試個位數的表示式運算結果均正確 */ #include<stdio.h> #include<std