1. 程式人生 > >考研資料結構與演算法之堆疊的使用(四)連結串列實現的堆疊

考研資料結構與演算法之堆疊的使用(四)連結串列實現的堆疊

還是參考了別人的程式碼,不過比我自己寫出來的確實是要簡潔的多,不過仍然有不規範的地方,但是仍然值得我學習一下,在敲打的時候也是受到了一定的啟發。

#include <stdio.h>
#include <stdlib.h>
#define FULL 1000
#define EMPTY 0
typedef char data;
struct elem
{
	data d;
	struct elem *next;
};
struct stack
{
	int cnt;
	struct elem *top;
};
void initialize(stack *stk); 
void push(stack *stk, data d);
data pop(stack *stk);
data top(stack *stk);
bool empty(stack *stk);
bool full(stack *stk);
int main(void)
{
	system("pause");
}
void initialize(stack *stk)
{
	stk->cnt = 0;
	stk->top = NULL;
}
void push(stack *stk, data d)
{
	elem *p;
	p = (elem *)malloc(sizeof(elem));
	p->d = d;
	p->next = stk->top;
	stk->top = p;
	stk->cnt++;
}
data pop(stack *stk)
{
	data d;
	elem *p;
	d = stk->top->d;
	p = stk->top;
	stk->top = p->next;
	stk->cnt--;
	free(p);
	return d;
}
data top(stack *stk)
{
	return stk->top->d;
}
bool empty(stack *stk)
{
	return bool(stk->cnt == EMPTY);
}
bool full(stack *stk)
{
	return bool(stk->cnt == FULL);
}


相關推薦

極客講堂資料結構演算法:複雜度分析

(本文根據極客講堂——資料結構與演算法之美專欄的問答區整理修改而成,如有侵權還希望聯絡我鴨~) 一、什麼是複雜度分析? 1.資料結構和演算法解決是“如何讓計算機更快時間、更省空間的解決問題”。 2.因此需從執行時間和佔用空間兩個維度來評估資料結構和演算法的效能。 3.分別

資料結構演算法:陣列

陣列看起來簡單基礎,但是很多人沒有理解這個資料結構的精髓。帶著為什麼陣列要從0開始編號,而不是從1開始的問題,進入主題。 一、 如何實現隨機訪問 1) 陣列是一種線性資料結構,用連續的儲存空間儲存相同型別資料: I) 線性表:陣列、連結串列、佇列、棧 ;非線性表

資料結構演算法排序2選擇排序 ——in dart

  選擇排序的演算法複雜度與氣泡排序類似,其比較的時間複雜度仍然為O(N2),但減少了交換次數,交換的複雜度為O(N),相對氣泡排序提升很多。演算法的核心思想是每次選出一個最小的,然後與本輪迴圈中的第一個進行比較,如果需要則進行交換。 1 import 'dart:math' show Random

java資料結構演算法Stack設計實現

關聯文章:   本篇是java資料結構與演算法的第4篇,從本篇開始我們將來了解棧的設計與實現,以下是本篇的相關知識點: 棧的抽象資料型別   棧是一種用於儲存資料的簡單資料結構,有點類似連結串列或者順序表(統稱線性表),棧與線性表的最大區別是

資料結構演算法Stack——in dart

用dart 語言實現一個簡單的stack(棧)。 1 class Stack<E> { 2 final List<E> _stack; 3 final int capacity; 4 int _top; 5 6 Stack(this.capacit

資料結構演算法Stack的應用——in dart

  參考教科書上的一個應用例子,用棧來分析一行輸入中的括號brackets是否匹配。用stdin讀取使用者輸入,並輸出檢查結果。exit 退出。 注意這行程式碼: import 'stack.dart';// 需要與上一個Stack的例子在同一個資料夾下。 1 import 'dart:io';

資料結構演算法

想要學習資料結構與演算法,首先要掌握複雜度分析。因為資料結構與演算法要解決的就是如何更省,更快的儲存和處理資料的問題,因此我們要有一個衡量效率和資源消耗的方法,這就是複雜度的分析 作為初學者和非演算法工程師,只需要掌握最常用、最基礎的20個數據結構與演算法,學習他們的:“來歷”、“特點”、“適合解決什麼問題

考研資料結構演算法堆疊的建立使用

    到了堆疊這裡一下子就輕鬆了,算是一種暫時的解脫吧。經過了連結串列部分的學習和思考,我突然意識到嚴蔚敏教材的嚴謹性。下面是按照教材實現的堆疊操作程式碼,唯一有些疑問的是在Pop操作中要不要根據需要縮減堆疊的尺寸呢? #include <stdio.h>

考研資料結構演算法堆疊的使用連結串列實現堆疊

還是參考了別人的程式碼,不過比我自己寫出來的確實是要簡潔的多,不過仍然有不規範的地方,但是仍然值得我學習一下,在敲打的時候也是受到了一定的啟發。 #include <stdio.h> #include <stdlib.h> #define FULL

考研資料結構演算法堆疊的使用利用堆疊匹配括號

    具體實現方法如下: int main(void) {     SqStack S;     InitStack(S);     char str[255];     scanf("%s",str);     int i = 0;     while( str[i]

考研資料結構演算法堆疊的使用利用堆疊實現進位制轉換

    將十進位制的數字轉換成各種不同的進位制,這裡以八進位制為例,其實就是不斷的除以八然後取餘數,雖然用陣列也不難實現,但是顯然棧的後進先出的特性使得更容易理解了,具體實現方法如下: int main(void) { SqStack S; InitStack(S);

考研資料結構演算法樹的生成1

只寫了個開頭中的開頭,因為書上的內容開始有點複雜了,尤其是引用了堆疊,這樣不利於專一的對樹進行學習,因此我在思考一種最合理的方案來對他進行簡化,現在只是對結構體進行了定義,如下: #include <stdio.h> #include <stdlib.h

考研資料結構演算法利用堆疊實現行編輯程式

今天我的部落格終於迎來了第一位關注著,但是同時我也發現了之前的程式在出棧時是有一些問題的,但是還沒找到確切的原因,然後這一段程式碼是今天晚上實現的行編輯的demo,但是現在是不完善的,明天或者後天我將會將它徹底修復。 #include <stdio.h> #i

資料結構演算法列舉窮舉法 C++實現

列舉法的本質就是從所有候選答案中去搜索正確的解,使用該演算法需要滿足兩個條件: 1、可以先確定候選答案的數量; 2、候選答案的範圍在求解之前必須是一個確定的集合。 列舉是最簡單,最基礎,也是最沒效率的演算法 列舉法優點: 1、列舉有超級無敵準確性,只要時間足夠,正確的列舉得出的結

PTA 資料結構演算法題目集中文6-7 在一個數組中實現兩個堆疊

6-7 在一個數組中實現兩個堆疊(20 分)本題要求在一個數組中實現兩個堆疊。函式介面定義:Stack CreateStack( int MaxSize ); bool Push( Stack S, E

Javascript資料結構演算法的圖Graph實現

Javascript之資料結構與演算法的圖(Graph)實現 簡介 廣度優先搜尋演算法實際應用-最短路徑(非權值) 深度優先搜尋演算法實際應用-拓撲排序(有向無環圖) Dijkstra 演算法 Floyd-Warshall

PTA資料結構演算法題目集中文4-7 在一個數組中實現兩個堆疊 (20分)

本題要求在一個數組中實現兩個堆疊。 函式介面定義: Stack CreateStack( int MaxSize ); bool Push( Stack S, ElementType X, int Tag ); ElementType Pop( Stack S, in

資料結構演算法棧常見案例

棧是一種常用資料結構,其特性是FILO(first in last out),其基本概念這裡不做介紹,相信都學過了。直接食用java中已經封裝好Stack<>類。 棧的效率:入棧出棧複雜度為O(1),不需要比較和移動操作。 案例1:單詞逆序 比

資料結構演算法——單鏈表

單鏈表的頭插法,插入時就是逆序。 InsertList()還不完善。 #include<stdio.h> #include<stdlib.h> #define ERROR 0 #define OK 1 typedef int Status ; typedef int

資料結構演算法——線性表

#include <stdio.h> #include <stdlib.h> #define LIST_INIT_SIZE 200 #define LISTINCREASE 10 #define ERROR 0 #define OK 1 typedef int Elemt