1. 程式人生 > >靜態順序表的實現(陣列實現)

靜態順序表的實現(陣列實現)

#include"SeqList.h"

void InitSeqList(SeqList *seq)				//1. 初始化(無需將每個元素置0,只需設定有效元素個數就可以)
{
	assert(seq);
	seq->size = 0;
}
void AddBack(SeqList *seq, TypeData data)   //2. 尾插
{
	assert(seq);
	if (seq->size >= SeqMaxLenth)
	{
		return;
	}
	seq->size++;
	seq->Data[seq->size - 1] = data;
}
void DelBack(SeqList *seq)					 //3. 尾刪
{
	assert(seq);
	if (seq->size <= 0)
	{
		return;
	}
	seq->size--;
}
void AddFront(SeqList *seq, TypeData data)  //4. 頭插
{
	assert(seq);
	if (seq->size >= SeqMaxLenth)
	{
		return;
	}
	seq->size++;
	int i = seq->size - 1;
	for (; i > 0; i--)
	{
		seq->Data[i] = seq->Data[i - 1];
	}
	seq->Data[0] = data;
}
void DelFront(SeqList *seq)					//5. 頭刪
{
	assert(seq);
	if (seq->size <= 0)
	{
		return;
	}
	size_t i=0;
	for (; i < seq->size-1; i++)
	{
		seq->Data[i] = seq->Data[i + 1];
	}
	seq->size--;
}
TypeData Get(SeqList *seq, size_t pos)	   //6. 讀任意位置元素	
{
	assert(seq);
	if (pos>seq->size-1)
	{
		return -1;                         //若位置無效,則返回-1
	}
	return seq->Data[pos];
}

void Mulity(SeqList *seq, size_t pos, TypeData data)  //7. 修改任意位置元素
{
	assert(seq);
	if (pos > seq->size - 1)
	{
		return;
	}
	seq->Data[pos] = data;
}
size_t Search(SeqList *seq, TypeData data)            //8. 查詢指定元素值的下標
{
	assert(seq);
	size_t i = 0;
	for (; i < seq->size; i++)
	{
		if (seq->Data[i] == data)
			return i;
	}
	return -2;                                       //若沒有找到,則返回-2
}
void Insert(SeqList *seq, size_t pos, TypeData data) //9. 在任意位置插入元素
{
	assert(seq);
	if (seq->size >= SeqMaxLenth)
	{
		return;
	}
	seq->size++;
	size_t i = seq->size-1;
	for (; i >pos; i--)
	{
		seq->Data[i] = seq->Data[i -1];
	}
	seq->Data[pos] = data;
}
void SeqListPrint(SeqList *seq)                     //列印順序表
{
	assert(seq);
	size_t i = 0;
	for (; i < seq->size; i++)
	{
		printf("[%p:],[%d]\t", &seq->Data[i], seq->Data[i]);
	}
	printf("\n");
}
void Test1()                                       //測試
{
	SeqList seq;
	size_t tmp=0;
	InitSeqList(&seq);
	AddBack(&seq, 1);
	AddBack(&seq, 2);
	AddBack(&seq, 3);
	AddBack(&seq, 4);
	SeqListPrint(&seq);

	DelBack(&seq);
	SeqListPrint(&seq);

	AddFront(&seq, 4);
	SeqListPrint(&seq);

	DelFront(&seq);
	DelFront(&seq);
	SeqListPrint(&seq);

	Mulity(&seq, 0, 8);
	SeqListPrint(&seq);

	tmp=Get(&seq, 3);
	printf("%d\n", tmp);

	tmp = Get(&seq, 1);
	printf("%d\n", tmp);

	tmp=Search(&seq, 3);
	printf("%d\n", tmp);

	tmp = Search(&seq,6);
	printf("%d\n", tmp);

	Insert(&seq, 1, 0);
	Insert(&seq, 2, 0);
	Insert(&seq, 0, 0);
	SeqListPrint(&seq);
}
  • 為外部提供的介面seqlist.h
#ifndef __SEQLIST_H__
#define __SEQLIST_H__

#include<assert.h>
#include<stdio.h>
#include<stdlib.h>
#define SeqMaxLenth 1000

typedef int TypeData;
typedef struct SeqList{
	TypeData Data[SeqMaxLenth];                 //靜態順序表資料
	size_t size;                                //有效元素個數
}SeqList;

void InitSeqList(SeqList *seq);
void AddBack(SeqList *seq, TypeData data);
void DelBack(SeqList *seq);
void AddFront(SeqList *seq, TypeData data);
void DelFront(SeqList *seq);
TypeData Get(SeqList *seq, size_t pos);
size_t Search(SeqList *seq, TypeData data);
void Mulity(SeqList *seq, size_t pos, TypeData data);
void SeqListPrint(SeqList *seq);

void Test1();

#endif
  • 外部測試程式碼main.c
#include"SeqList.h"

int main()
{
	Test1();
	system("pause");
	return 0;
}
總結如下:

相關推薦

靜態順序實現陣列實現

#include"SeqList.h" void InitSeqList(SeqList *seq) //1. 初始化(無需將每個元素置0,只需設定有效元素個數就可以) { assert(seq); seq->size = 0; } void AddBack(SeqList *seq, Ty

順序應用5:有序順序歸併資料結構

順序表應用5:有序順序表歸併 Time Limit: 100 ms Memory Limit: 880 KiB Submit Statistic Problem Description 已知順序表A與B是兩個有序的順序表,其中存放的資料元素皆為

線性順序操作已完結

考研408資料結構線性表複習;有任何問題私我#include<iostream> #include<algorithm> const int initlength = 100; ///順序表的初始長度 using namespace std

資料結構——順序操作C語言實現

//順序表list #include"stdio.h" #define maxsize 15 typedef struct{ int a[maxsize]; int size; }list; //建立 void create(lis

順序的插入操作原理及實現C語言詳解

順序表中存放資料的特點和陣列這種資料型別完全吻合,所以順序表的實現使用的是陣列。換句話說,順序表中插入元素問題也就等同於討論如何向陣列中插入資料。 因此,順序表中插入資料元素,無非三種情況: 在表頭插入; 在表的中間某個位置插入; 直接尾隨順序表,作為表的最後一個元素; 無論在順序表的什麼位置插

java實現將一列亂序的字元,'a','c','u','b','e','p','f','z',排序後並按照英文字母的逆序輸出陣列排序

實現: package com.array.test; import java.util.Arrays; import java.util.Scanner; /** * 將一列亂序的字元,'a','c','u','b','e','p','f','z',排序後並按照英文字母表的逆

java實現將一列亂序的字元,'a','c','u','b','e','p','f','z',排序後並按照英文字母的逆序輸出陣列排序

實現: package com.array.test; import java.util.Arrays; import java.util.Scanner; /** * 將一列亂序的字元,'a',

C++模板的實現模板函式和模板類,附帶模板實現順序和連結串列程式碼

模板  當我們實現一個交換函式時,我們可以寫成如下。 void Swap(int& x, int& y) { int tmp = x; x = y; y = tmp; }  這裡只能交換兩個整數,當我們

鄰接與逆鄰接陣列實現

配一張圖: 比如H[1] 下面有四個數(-1也是的) -1,0, 3, 5; 就說明A[0] 是點 1 的弧頭, A[3] 是 1 的弧頭, A[5] 也是1 的弧頭; 但是一個數組的一個小單元之能存一個數怎麼辦呢, 這個時候就是next的用處了; 我們讓next[5]

用c++實現 c++順序實現採用模板

函式實現資料的插入(頭插&&尾插)、刪除(頭刪&&尾刪)、查詢、按位置插入、按位置刪除、順序表求長、順序表清除、順序表摧毀、資料的逆置以及資料排序 main函式 #include"SeqList.h"//順序表 void main() {

順序實現C語言

 /********************* * 指向結構體變數的指標作函式引數 * ***********************/ #include<stdio.h> #define MAXSIZE 100 typedef int datatype; ty

佇列的順序實現C語言

#include <stdio.h> #include <stdlib.h> struct QueueRecord; typedef struct QueueRecord* Queue; typedef int ElementType;

資料結構——線性順序表示和實現c語言

PS:資料結構(C語言版)——清華大學出版社, 2.1節程式碼實現#include <stdio.h> #include <stdlib.h> #define TRUE 1 #define FALSE 0 #define OK 1 #define E

棧的數組和鏈實現Java實現

javascrip search 分享圖片 sys blog inter () 結果 length 我以前用JavaScript寫過棧和隊列,這裏初學Java,於是想來實現棧,基於數組和鏈表。 下面上代碼: 1 import java.io.*; 2 //用接口來

線性基本操作的實現合並

typedef real 不變 names base ++ 元素 一個 修改元素 //實現順序表的建立、初始化、插入、刪除、修改、普通合並、有序合並 #include<iostream> #include<stdio.h> #include<

線段樹模板陣列實現

 首先是基本定義環節 因為線段樹左子節點和右子節點在建構函式的時候比較常用 我們就把這兩個語句簡化一下; #define lson l, m, rt<<1 #define rson m+1, r, rt<<1|1 const int maxn=5008;

《大話資料結構4》—— 佇列的順序儲存結構 迴圈佇列—— C++程式碼實現

   佇列  ● 佇列的概念:   佇列(簡稱作隊,Queue)也是一種特殊的線性表,佇列的資料元素以及資料元素間的邏輯關係和線性表完全相同,其差別是線性表允許在任意位置插入和刪除,而佇列只允許在其一端進行插入操作在其另一端進行刪除操作。 佇

UVA-12657 Boxes in a Line (模擬,雙向連結串列陣列實現)

第一次對陣列實現雙向連結串列的練習,理解了發現數組實現真方便… 題目:UVA-12657 題目描述: 你有n個盒子在桌子上的一條線上從左到右編號為1……n。你的任務是模擬四種操作 1 X Y 移動盒子編號X到盒子編號Y的左邊(如果X已經在Y的左邊了就忽略) 2 X Y 移

2018-11-12單鏈實現Java實現

package singlelinklist; public class Node { int item; Node next; public Node(int item) { this.item = item; this.next = nul

java實現最大堆陣列方式

最大堆、最小堆其實就是優先佇列,每次取出的元素都是最大或最小的。本部落格主要用陣列實現最大堆,最小堆的實現原理也是一樣的。當然,也可以用list集合來儲存元素,方便很多,不用事先設定容量的大小。但還是想用原生的方式來實現一下。具體的註釋已經嵌入到程式碼當中了。 package heap; //