1. 程式人生 > >資料結構學習之路(一)C語言對陣列的簡單實現

資料結構學習之路(一)C語言對陣列的簡單實現

以下的程式只是在觀看郝斌老師講解的(C語言資料結構)之後自己做得簡單練習。

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

typedef struct MyArray{
	int * pBase;	//存放陣列第一個元素的地址
	int len;		//陣列長度
	int cnt;		//陣列的有效長度
}* PARR;

void init(PARR, int);
bool append(PARR, int);
bool isEmpty(PARR);
bool isFull(PARR);
void showArray(PARR);
bool insert(PARR, int, int);
bool remove(PARR, int, int *);

int main(void)
{
	PARR pArr;
	init(pArr, 5);
	showArray(pArr);
	append(pArr, 1);
	append(pArr, 2);
	append(pArr, 3);
	append(pArr, 4);
	append(pArr, 5);
	showArray(pArr);
	insert(pArr,5,6);
	showArray(pArr);
	int x;
	remove(pArr,4,&x);
	showArray(pArr);
	printf("%d\n", x);
	insert(pArr,4,6);
	showArray(pArr);
	return 0;
}

/*
初始化陣列
*/
void init(PARR pArr, int length)
{
	pArr->pBase = (int *)malloc(sizeof(int)*length);
	if (pArr->pBase==NULL){
		printf("%s\n", "記憶體分配失敗!");
		exit(-1);
	}else{
		pArr->len = length;
		pArr->cnt = 0;
	}
}

void showArray(PARR pArr){
	if (isEmpty(pArr))
		printf("%s\n", "陣列為空!");
	else{
		int i;
		for (i=0;i<pArr->cnt;i++)
			printf("%d  ", pArr->pBase[i]);
		printf("\n");
	}
	return;
}

bool isEmpty(PARR pArr){
	if (pArr->cnt==0)
		return true;
	return false;
}

bool isFull(PARR pArr){
	if (pArr->cnt==pArr->len)
		return true;
	return false;
}

bool append(PARR pArr, int val){
	if (isFull(pArr)){
		printf("%s\n", "陣列已滿!");
		return false;
	}else{
		pArr->pBase[pArr->cnt] = val;
		pArr->cnt++;
		return true;
	}
}


bool insert(PARR pArr, int index, int val){
	if (isFull(pArr)){
		printf("%s\n", "陣列已滿!");
		return false;
	}

	if (index<0||index>pArr->cnt)
	{
		printf("%s\n", "陣列下標越界!");
		return false;
	}

	int i;
	int temp;

	for (i=pArr->cnt; i>index; i--){
		temp = pArr->pBase[i-1];
		pArr->pBase[i-1] = pArr->pBase[i];
		pArr->pBase[i] = temp;
	}
	pArr->pBase[index] = val;
	pArr->cnt++;
	return true;
}

bool remove(PARR pArr, int index, int * pVal){
	if (isEmpty(pArr)){
		printf("%s\n", "陣列已空!");
		return false;
	}

	if (index<0||index>pArr->cnt-1){
		printf("%s\n", "陣列下標越界!");
		return false;
	}

	int i;
	int temp;
	*pVal=pArr->pBase[index];
	for(i=index; i<pArr->cnt; i++){
		temp = pArr->pBase[i];
		pArr->pBase[i] = pArr->pBase[i+1];
		pArr->pBase[i+1] = temp;
	}
	pArr->cnt--;
	return true;
}

只是實現了陣列的一些簡單功能,如有不妥的地方,煩請聯絡我。

email: [email protected]

http://blog.csdn.net/zyy_2018/article/details/79722186

相關推薦

資料結構學習C語言陣列簡單實現

以下的程式只是在觀看郝斌老師講解的(C語言資料結構)之後自己做得簡單練習。# include <stdio.h> # include <stdlib.h> typedef struct MyArray{ int * pBase; //存放陣列第一個

Tensorflow學習:從MNIST資料集開始

MNIST資料集簡單介紹: MNIST 資料集可在 http://yann.lecun.com/exdb/mnist/ 獲取, 它包含了四個部分: Training set images: train-images-idx3-ubyte.gz (9.9 MB,

資料視覺化神器matplotlib學習

直接上程式碼吧,說明寫在備註就好了,這次主要學習一下基本的畫圖方法和常用的圖例圖示等 from matplotlib import pyplot as plt import numpy as np #這裡是最最基本的程式碼了 #x軸-2到2均分50個點 x = np.linspace(-2, 2,

一個菜鳥的資料結構學習棧篇

棧的基本操作如下: 相關結構體: typedef int status; typedef struct { SElemType *base; //在棧建立之前和銷燬之後,base的值為NULL SElemType *top; //棧

我的學習SQL盲註學習

網絡安全 dvwa sql盲註 我的學習之路,現在零基礎,是一個小白,請各位大牛批評指正!寫下這篇,是對自己的一個思路的整理,僅供參考。 Dvwa中登錄進入,首先在DVWA Security中設置等級為low,然後進入SQL Injection(blind),隨意輸入一個數字進行抓包,然後找

初識vue.js,我的學習

自動打開 下一步 鏡像 分享圖片 bpa demo 中間 前端技術 width 在以前做項目時經常是新建一些html、css、等一些文件,但在接觸了vue.js之後我發現我已經有點看不懂前端了,這對於我這麽一個菜鳥來說實在是很苦逼的事情。現在的前端技術都離不開

Hadoop學習理論基礎和邏輯思維

file 工作 puts 範圍 小文件 集合 無效 任務 問題 三個題目 第一題 問題描述 統計出當前這個一行一個IP的文件中,到底哪個IP出現的次數最多 解決思路 //必須要能讀取這個內容 BufferedReader br = n

Python學習

Python 基礎 Python基礎學習1(1)變量在Python中用來存儲數據所指向的內存地址叫做變量(2)變量的命名變量的命名由數字,字母,下劃線組成,數字不能開頭;不要使用Python中的關鍵字和函數名稱來命名變量;命名時要簡明,具有描述性;變量名區分大小寫。命名方式遵循駝峰命名法和下劃線命名法

Hive學習 Hive初識

完成 優化 ble 缺點 ase 適合 table vol 利用 Hive 簡介 什麽是Hive 1、Hive 由 Facebook 實現並開源 2、是基於 Hadoop 的一個數據倉庫工具 3、可以將結構化的數據映射為一張數據庫表 4、並提供 HQL(Hive

Scala學習 Spark初識

海量 處理 apache .org 流式 height 計算平臺 提高 結構化數據 一、官網介紹 官網地址:http://spark.apache.org/ Apache Spark™是用於大規模數據處理的統一分析引擎。 從右側最後一條新聞看,Spar

學習淺談:基礎命令及linux工作原理

linux命令 看了視頻,它系統的講解了linux從硬件到操作系統的工作過程,以及常用的基礎命令的詳細參數及用法。 我也在這裏整理之後加強記憶一次基本概念,及linux文件樹目錄的基本知識結構。 硬件——>操作系統OS——>l

JAVA基礎學習

個人理解 整形 之路 boolean mman 類型 布爾 屬性 註釋 JAVA基礎概念: PATHl: path屬於操作系統的屬性,是系統用來搜尋可執行文件的路徑,個人理解是類似於linux中的全局變量 CALSSPATH:java程序解釋類文件時加載文件的路徑 註釋

orcale存儲過程學習

部分 bsp packages ORC har package var IE repl 1.在packages文件夾下新建一個“包”,當新建時會同時出現兩個供編輯的面板:一個為“聲明”的,一個為“body”部分的。 2.編寫兩個空方法: ------------------

webpack學習

把學習webpack時的筆記貼上來以備不時之需,多摘自官方文件,閱讀文件的時候中英文一起看的,中文文件有時比較生澀會加入自己的理解。   安裝: 前提: 首先你要有個node環境(官方推薦LTS版本)。   本地安裝:   npm install --save-d

Kubernetes學習Kubeadm部署K8S集群

chown you eof onf 訪問 perf 處的 iyu inter 一個星期會超過多少閱讀量呢??發布一篇,看看是否重新在51上寫學習博文,有老鐵支持嘛?? 使用kubeadm部署集群 節點名稱 ip地址 部署說明 Pod 網段 Service網段 系統說明

C語言學習——初識C語言

                      C語言的學習之路(一)——初識C語言 從9月8日踏入大學校園,已近過去40多天了。這篇部落格也是踏入大學的第一篇部落格。內心很慌:因為自己

Weex學習

寫在前面:本文建立在讀者已安裝node.js環境,並掌握vue.js的基礎上。 1.搭建開發環境 1.1安裝依賴 全域性安裝weex-toolkit,類似於vue.js的vue-cli腳手架工具 npm install -g weex-toolkit 若提示沒有許可權,

Docker 學習

Docker: 啟動docker:service docker start 搜尋映象:docker search centos 獲取映象:docker pull centos 檢視映象:docker images 刪除映象:docker rmi 啟動容器 dock

Linux 學習

01|03 kernel space 記憶體碎片 GUI:圖形使用者介面 CLI:命令列使用者介面 核心功能: 程序管理 記憶體管理 檔案系統 網路功能 硬體驅動 安全機制 批處理系統 jobs1$$$$$$jobs2

Html學習

基礎標籤 <!DOCTYPE> 定義文件型別。 <html>定義一個 HTML 文件 <title>為文件定義一個標題 <body>定義文件的主體 <h1> to <h6>定義 HTML 標題 <p> 定