1. 程式人生 > >線性表的鏈式儲存結構從建表插入到 刪除銷燬

線性表的鏈式儲存結構從建表插入到 刪除銷燬

檔案1    list.c

#include<stdio.h>
#include"list.h"
#include<stdlib.h>
#include<string.h>
/*
	函式名 creatList;
	功能 建立連結串列 申請空間
	返回值 無
	定義一個指標函式返回的就是個函式
*/
LIST *creatList(void)
{
	LIST * pList = NULL;
	pList = (LIST *)malloc(sizeof(LIST)); 
	

	//清空 並且初始化
	if(NULL == pList){
		memset(pList,0,sizeof(LIST));
	}	
	//指標函式 所以要返回pList
	return pList;
}
/*
	函式名稱:destoryList
	函式功能 : 銷燬線性表
	引數:LIST *pList 指向線性表首地址的指標
	函式返回值:無

*/
void destoryList(LIST *pList)
{
	LIST * pDel = NULL;
	if(NULL == pList)
	{
		return ;
	}
	while(1)
	{	

		//找到被刪除的結點
		pDel = pList->pNext;
		if(NULL == pDel)
		{
			break;
		}
		//保護後面的結點
		pList->pNext = pDel->pNext;
		free(pDel);
	}
	free(pList);
	pList = NULL;
	
}

/*
	函式名:insertList
	功能  給線性表插入資料(前插法)(尾插法)(中間插入)
	引數:LIST *pList 指向首地址的指標;
		int offset 要插入的位置;
		data_type item 要插入的元素
	函式返回值 成功時候,返回0;失敗的時候返回-1;

*/
int insertList(LIST *pList,int offset,data_type item)
{	
	LIST *pTmp = NULL; //尾結點要插入的位置
	LIST *pNew = NULL; //頭結點要插入的資料
	 //1.判斷是否可以插入
	if(NULL == pList)
	{
		return ERR;
	}
	//2.新建結點 並且賦值
	pNew = (LIST *)malloc(sizeof(LIST));	
	if(NULL == pNew)
	{
		return ERR;
	}
	pNew->data = item;
	pNew->pNext = NULL;	
	

	//從頭結點插入
	if(HEAD == offset)
	{	
	//找到要插入的位置--pList
		//3.保護後面的結點
		pNew->pNext = pList->pNext;
		//4.連結新的結點
		pList->pNext = pNew;
	}
	//從尾結點插入  準確的說叫接入
	
	
	if(TAIL == offset)
	{
		//找到要插入的結點
		pTmp = pList;
		//3. 保護後面的結點
		while(NULL != pTmp->pNext)
		{
			//向後移動尾結點
			pTmp = pTmp->pNext;
		}
		//4. 接入新的結點
		pTmp->pNext = pNew;
	}
	return OK;
}
/*	函式名稱 :showList
	函式功能: 列印線性表
	函式引數:LIST*pList
	*/
void showList(LIST *pList)
{
	LIST *pstr = pList;
	if(NULL == pList)
	{
		return ;
	}
	while(1){
		if(NULL != pstr->pNext)
		{
			printf("%d",pstr->data);
		
			pstr = pstr->pNext;
		}else{
			break;
			}
	}
	printf("\n\t");

}

檔案2     list.h

#ifndef _LIST_H_
#define _LIST_H_

typedef int data_type;


typedef struct list
{
	data_type data;
	struct list *pNext;
}LIST;

enum result{

	ERR = -1,
	OK,

	FLASE =0,
	TRUE,
};
enum offset
{
	TAIL=-1,
	HEAD,
};
//宣告一個指標函式返回的就是creatList
LIST *creatList(void);
//宣告一個函式 銷燬線性表;

void destoryList(LIST *pList);
// 宣告一個插入資料給線性表的函式
int insertList(LIST *pList,int offset,data_type item);
void showList(LIST*pList);

#endif

檔案3     test.c

#include<stdio.h>

#include"list.h"

int main(void)

{

         LIST*pList;

         data_type data;

        

         pList = creatList();  

         if(NULL == pList)

         {

                  return ERR;

         }

         insertList(pList,0,52);

        

         insertList(pList,0,32);

         insertList(pList,0,22);

         insertList(pList,0,12);

         showList(pList);

         return 0;

}

執行結果如下



相關推薦

線性儲存結構插入刪除銷燬

檔案1    list.c#include<stdio.h> #include"list.h" #include<stdlib.h> #include<string.h> /* 函式名 creatList; 功能 建立連結串列 申請空間

線性——儲存結構合併操作

     採取的結構和上一篇博文一致,均為單鏈表儲存結構。#include<iostream> #include<stdio.h> #include<stdlib.h> #define ElemType int #define Status

儲存結構之單鏈

1.線性表的鏈式儲存結構 線性表的鏈式儲存結構允許資料元素存在任意未被佔用的記憶體空間,因為線上性表的鏈式儲存結構中,除了儲存資料元素相關的資料資訊之外,還儲存了資料元素的後繼元素儲存地址,這樣通過當前資料元素很容易找到下一個資料元素。 鏈式儲存結構中,存取一個數據元素內容資訊和直接後繼的儲存位置的結構稱

資料結構 筆記:線性儲存結構

鏈式儲存的定義 為了表示每個資料元素與其直接後繼元素之間的邏輯關係;資料元素出了儲存本身的資訊外,還需要儲存直接後繼的資訊。 ps:在邏輯上,元素之間是相鄰的;在實體記憶體中元素之間並無相鄰關係。 鏈式儲存邏輯結構 -基礎鏈式儲存結構的線性表中,每個節點都包含資料域和指標域 ·資

資料結構線性儲存結構單鏈(C++)

一. 標頭檔案—linkedlist.h 1 #ifndef _LIKEDLIST_H_ 2 #define _LIKEDLIST_H_ 3 4 #include <iostream> 5 6 template <class T> 7 struc

大話資料結構 —— 3.6 線性儲存結構

3.6.1 順序儲存結構不足的解決辦法 C同學:反正要在相鄰元素間留多少空間都是有可能不夠的,那不如乾脆不要考慮相鄰位置這個問題了。哪裡有空位就放在哪裡,此時指標剛好可以派上用場。 每個元素多用一個

線性儲存結構的基本操作(經編譯)

/* 連結串列銷燬的時候,是先銷燬了連結串列的頭,然後接著一個一個的把後面的結點銷燬了,這樣這個連結串列就不能再使用了。 連結串列清空的時候,是先保留了連結串列的頭,然後把頭後面的所有的結點都銷燬,最後把頭裡指向下一個的指標設為空,這樣就相當與清空了,但這個連結

【資料結構線性儲存結構--單鏈

1. 線性表的鏈式儲存結構 鏈式儲存:用一組任意的儲存單元儲存線性表中的資料元素。用這種方法儲存的線性表簡稱線性連結串列。 儲存連結串列中結點的一組任意的儲存單元可以是連續的,也可以是不連續的,甚至是零散分佈在記憶體中的任意位置上的。 連結串列中結點的邏輯順序和物理順序不

線性包括順序儲存結構儲存結構

還記得資料結構這個經典的分類圖吧: 今天主要關注一下線性表。 什麼是線性表 線性表的劃分是從資料的邏輯結構上進行的。線性指的是在資料的邏輯結構上是線性的。即在資料元素的非空有限集中 (1) 存在唯一的一個被稱作“第一個”的資料元素,(2) 存在唯一的一個被稱

(一)線性儲存結構

2.3.1 線性表的鏈式儲存結構——連結串列 連結串列: 1.每個節點中除資料域外,設定了一個指標域,用以指向其後繼節點,這樣構成的連結表稱為線性單向連結串列,簡稱單鏈表。 2.每個節點中除資料域外,設定兩個指標域,分別用以指向其前驅節點和

3.線性儲存結構————靜態連結串列(C語言和C++完整解析)

目錄 1.靜態連結串列的概念 因為有些語言沒有指標,所以難以實現普通連結串列,靜態連結串列就是用來解決這一問題的有力工具,靜態連結串列使用陣列來實現連結串列。靜態連結串列用遊標來代替普通連結串列的指標域,並且用下標代替普通連結串列的結點

2.線性儲存結構————單鏈(思路分析,C語言、C++完整程式)

目錄 1.單鏈表的基本概念 (1)單鏈表:當連結串列中的每個結點只含有一個指標域時,稱為單鏈表。 (2)頭指標:如上圖所示,連結串列中第一個結點的儲存位置叫做頭指標。 (3)頭結點:頭結點是放在第一個元素結點之前的結點,頭結點不是連結串列中的必

2.3 線性儲存結構(連結串列)

基本概念和特點 連結串列的定義 -線性表的鏈式儲存結構稱之為連結串列(linked list)。連結串列包括兩部分構成:資料域和指標域。資料域儲存資料元素,指標域描述資料元素的邏輯關係。 - 連結串列通常使用帶頭結點的表示。指向頭結點的指標稱之為頭指標

走進資料結構和演算法(c++版)(3)——線性儲存結構

線性表的鏈式儲存結構   我們知道線性表的順序儲存結構在插入和刪除操作時需要移動大量的資料,他們的時間複雜度為O(n)O(n)。當我們需要經常插入和刪除資料時,順序儲存結構就不適用了,這時我們就需要用到線性表的鏈式儲存結構。   線性表的鏈式儲存結構的特點是

線性儲存結構

鏈式儲存定義: 為了表示每個資料元素與其直接後繼元素之間的邏輯關係,每個元素除了儲存本身的資訊外,還需要儲存指示其直接後繼的資訊。 單鏈表包括: 表頭結點:連結串列中的第一個結點,包含指向第一個資料元素的指標以及連結串列自身的一些資訊。 資料結點:連結串列中代表資料元素的

C語言實現線性儲存結構

線性表的鏈式儲存結構 特點 結點除自身的資訊域外,還有表示關聯資訊的指標域。因此,鏈式儲存結構的儲存密度小、儲存空間利用率低。 在邏輯上相鄰的結點在物理上不必相鄰,因此,不可以隨機存取,只能順序存取。 插入和刪除操作方便靈活,不必移動結點只需修改結點

線性、棧、佇列的儲存結構

一、順序儲存結構與鏈式儲存結構的區別        順序儲存就是從記憶體中取出一段連續地址的空間,將資料依次連續的儲存在這段空間中。而鏈式儲存結構是指資料儲存在記憶體中的地址是離散的,以資料節點為單

線性儲存結構下的基本操作

原始碼: #include<iostream> #include<cstring> #define OK 1 #define ERROR 0 #define OVE

程式設計實現順序儲存結構儲存結構線性的建立、查詢、插入刪除等基本操作

#include <stdio.h> #include <stdlib.h> typedef struct LNode{ int data; //連結串列資料 struct LNode* next; //連結串列指標 }LNode,*L

資料結構一一線性儲存結構插入與遍歷

#include <iostream> #include <stdio.h> #include <time.h> #include <malloc.h> #define ERROR 0 #define OK 1 typedef int Status;/*