1. 程式人生 > >C語言資料結構之線性表的基本操作

C語言資料結構之線性表的基本操作

線性表的基本操作

內容:

(1)順序表的操作

輸入一組整型元素序列,建立線性表的順序儲存結構。實現該線性表的遍歷。在該順序表中查詢某一元素,查詢成功顯示查詢元素,否則顯示查詢失敗。在該順序表中刪除或插入指定元素。 建立兩個按值遞增有序的順序表,將他們合併成一個按值遞增有序的順序表。

(2)單鏈表的操作

輸入一組整型元素序列,使用尾插法建立一個帶有頭結點的單鏈表。 實現該線性表的遍歷。在該單鏈表的第i個元素前插入一個整數。刪除該單鏈表中的第i個元素,其值通過引數將其返回。建立兩個按值遞增有序的單鏈表,將他們合併成一個按值遞減有序的單鏈表。要求利用原來

#include<stdio.h>
#include<stdlib.h>
#define MAX 20
#define LISTINCREMENT 10

typedef struct{
	int *elem;
	int length;
	int listsize;
}SqList;
void CreatList(SqList &L)
{//建立一個線性表
	L.elem=(int*)malloc(MAX *sizeof(int));
	if(!L.elem)
		return;//exit(0)
	L.listsize=MAX;
	printf("輸入表的長度:");
	scanf("%d",&L.length);
	printf("輸入%d個數:",L.length);
	for(int i=0;i<L.length;i++)
		scanf("%d",&L.elem[i]);
}
void Traverse(SqList L){
	//遍歷
	printf("表中資料為:");
	for(int i=0;i<L.length;i++)
		printf("%3d",L.elem[i]);
	printf("\n");
}
void LocateElem(SqList L,int e){
	//查詢
	int i;
	printf("輸入查詢的元素:");
	scanf("%d",&e);
	for(i=0;i<L.length;i++)
	{
		if(L.elem[i]==e){
			printf("查詢成功,查詢元素為%d",L.elem[i]);
			printf("\n");
			return;
		}
	}
	printf("查詢失敗");
	printf("\n");
}
int makesureElem(SqList L,int e)
{
	int i;
//確定要刪除的元素
	for(i=0;i<L.length;i++)
	{
		if(L.elem[i]==e)
		{
			printf("要刪除的元素 位置為 %d",i+1);
			printf("\n");
			return (i+1);
		
		}
	}
	
	printf("元素不存在");
	printf("\n");	return 0;
		
}
void ListInsert(SqList &L)
{//插入元素及其要插入的位置
	int i,int e;
	printf("輸入要插入位置及元素\n");
	scanf("%d%d",&i,&e);
	printf("在順序線性表中第%d個位置之前插入新的元素%d。\n",i,e);//在順序線性表L中第i個位置之前插入新的元素e,
	if(i<1||i>L.length+1) return;	//i的合法位置為1<=i<=ListLength(L)+1
	int *p,*q;
	q=&(L.elem[i-1]);
	for(p=&(L.elem[L.length-1]);p>=q;--p)*(p+1)=*p;
		*q=e;
	/*表示從連結串列的第i個元素開始一直到最後一個元素往後移一位p=&L.elem[L.length-1]
	意思是p賦初值為連結串列的最後一個元素地址,p>=q表示迴圈知道p<q的時候結束,--p是使p指標的指向往前移一位*/
	++L.length;
	return;
}
int ListDelete(SqList &L){
	//刪除元素
	int i,int e;
	printf("輸入要刪除的元素");
	scanf("%d",&e);
    i=makesureElem(L,e);
	if((i<1)||(i>L.length)) return 0;//i的合法值為1<=i<=ListLength(L)+1
	else{
		int *p,*q;
		p=&(L.elem[i-1]);
		e=*p;
		q=L.elem+L.length-1;
		for(++p;p<=q;++p)*(p-1)=*p;//被刪除元素之後的元素左移
		--L.length;
		printf("元素被刪除");
	}
return 0;
	        
}	
int main(){
	SqList L;
	CreatList(L);
	Traverse(L);
	LocateElem(L,1);
	ListInsert(L);//	ListInsert(L,3,8);
	Traverse(L);
	ListDelete(L);
	Traverse(L);
	
	return 0;
}

的儲存空間

相關推薦

C語言資料結構線性基本操作

線性表的基本操作 內容: (1)順序表的操作 輸入一組整型元素序列,建立線性表的順序儲存結構。實現該線性表的遍歷。在該順序表中查詢某一元素,查詢成功顯示查詢元素,否則顯示查詢失敗。在該順序表中刪除或插入指定元素。 建立兩個按值遞增有序的順序表,將他們合併成一個按值遞增有序的

基於C/C++語言資料結構線性(一)

資料結構學習筆記: 資料結構的重要性:資料結構我感覺很重要,不僅僅是考試很重要,而且在以後程式設計師事業上都是尤為重要的,知乎上有網友評價資料結構是最重要的程式設計基本能力,沒有之一。我感覺這個說法很對,並且大家都知道,資料結構與演算法這種說法常常被大家使用,就是因為資料

c語言資料結構順序

c語言資料結構之順序表:     順序表的結構跟陣列比起來還是很像的,相比於連結串列,資料表的優勢主要體現在他的查詢速度上,而連結串列的優勢相反,查詢速度慢,但對於插入一個數據來說還是比較快的 下面我們就來建立一個順序表 1:定義資料型別,我定義的是一個學生的結構體型別,首

c語言資料結構線性歸併大概

線性表:n個具有相同特性的資料元素的有限序列。較為靈活,可根據需要増長或縮短。 兩線性表歸併演算法:(此時已知其元素按值非遞減排列) void MergeList(List La, List Lb,

c語言資料結構順序線性的合併、並集

//#include "list_test.c" //#include "link_list_test.c" #include "List.h" #include "LinkList.h" #include "utils.c" void MergeList(const Lis

資料結構串的基本操作的實現(c語言

我們先一起來看串的一些概念… 字串(簡稱串),可以將其看作是種特殊的線性表,其特殊性在於線性表的資料元素的型別總是字元性,字串的資料物件約束為字符集。 串是由0個或多個字元組成的有限序列。一般記作:s = “s1 s2 s3 …. sn”,,其中,s是串名

C++資料結構線性

InitList( ):初始化順序表Insert(int L,int Elem):在L位置插入值Elem1.檢查記憶體空間是否夠,如果實際長度大於或等於最大容量,則要用realloc擴充套件記憶體空間2.判斷插入的位置L是否合法3.如果插入到表頭或表中,則要把元素往後挪。如果

C 資料結構中單鏈基本操作

C中的typedef C中的typedef關鍵字作用是為一種資料型別定義一個新名字,這樣做的目的有兩個,一是給變數定義一個易記且意義明確的新名字,如: typedef unsigned char BYTE; 把unsigned char型別自命名為BYTE。另一個目的是

資料結構 線性的實現

 程式碼: #include<algorithm> #include<iostream> #include<stdlib.h> #define MAXSIZE 1100 using namespace std; /* 線性表的實現 1.插入//o

資料結構線性演算法的構建與應用

  //資料結構值順序線性表的實現與應用 //c++程式碼進行實現 //sqlist.h程式碼                     //線性表的初始化 #def

資料結構線性

線性表的邏輯結構 線性表是由n個型別相同的資料元素組成的有限序列,記為(a1,a2,…,ai-1,ai,ai+1,…,an)。其中,這裡的資料元素可以是原子型別,也可以是結構型別。線性表的資料元素存在著序偶關係,即資料元素之間具有一定的次序。線上性表中,資料元

資料結構線性(二)

資料結構之線性表一主要講的是線性表的順序儲存結構和鏈式儲存結構的實現和程式碼。這次我們來討論下靜態連結串列,迴圈連結串列和雙向連結串列。 靜態連結串列 我們讓陣列每個元素都是由兩個資料域組成:data和cur。資料域data用來儲存資料元素,cur相當於我們連結串列中的n

常見資料結構線性

線性表 線性表(List):由零個或多個數據元素組成的有限序列。 線性結構是最簡單,也是最常用的資料結構之一。 線性結構的特點是:在資料元素的有限集中,除第一個元素無直接前驅,最後一個元素無直接後驅外,每個元素資料有且僅有一個直接前驅元素和一個直接後續元素。   線性表---順序

C語言資料結構連結串列

目錄 1.什麼是連結串列 連結串列是一種物理儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是通過連結串列中的指標連結次序實現的。連結串列由一系列結點(連結串列中每一個元素稱為結點)組成,結點可以在執行時動態生成。

資料結構線性 -- 連結串列(總括)

今天來總結一下連結串列。  首先,   什麼是連結串列?     就是採去鏈式儲存結構的線性表,所謂鏈式儲存就好比火車的車廂一樣,一節一節的連線起來,成為一個線性表。這種方式採用動態儲存分配方式,即

C語言資料結構靜態連結串列實現(A-B)U(B-A)

時間複雜度O(3n)不是很難,直接貼程式碼:StaticLinkList.h#ifndef _STATIC_LINK_LIST_H_ #define _STATIC_LINK_LIST_H_ #define MAXSIZE 100 typedef enum {ERROR,OK

C語言資料結構稀疏矩陣(一)

最近開始學習C語言的稀疏矩陣的一些知識,現在簡單的整理梳理一下知識脈絡,僅供自己總結學習,歡迎技術指正,拒絕盲噴。 1.首先先介紹一下關於稀疏矩陣的一些基礎知識,關於稀疏矩陣,一直都沒有過很清楚詳細的定義。簡單的說,在M*N的一個矩陣中,假設有t個元素不為0,那麼有計算公

資料結構線性的順序儲存結構

1.線性表定義:線性表是零個或多個數據元素的有限序列。兩種物理結構:順序儲存結構和鏈式儲存結構。 2.線性表的順序儲存結構定義:是指用一段地址連續的資料單元依次儲存線性表的資料元素。說白了就是在記憶體中佔用一塊空間,然後將相同資料型別的元素依次存入。 線上性表的定義中,指出是用一段地址連續的資料單元儲存線

資料結構線性—淺談單鏈有頭結點和無頭節點

有頭結點的連結串列統一了演算法的實現,無頭節點減少了節點個數,但是隻有根據實際情況選用真正的有無頭節點連結串列 待續://程式碼實現 待續://程式碼實現 待續://程式碼實現 /*****************************************

循序漸進學習資料結構線性

一、思維導圖 二、線性表的基本概念 1.名詞解釋: 線性表:由n個數據特性相同的元素構成的有限序列,有順序儲存和鏈式儲存兩種表示形式。 空表:線性表中元素的個數n=0的表。 線性表的鏈式儲存結構:特點是用一組任意的儲存單元儲存線性表的資料元素,包括兩個域,其中儲存資料元素資訊的域稱為資料域,儲存直接後繼儲