国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C數(shù)據(jù)結(jié)構(gòu)-線性表之順序表

這篇具有很好參考價(jià)值的文章主要介紹了C數(shù)據(jù)結(jié)構(gòu)-線性表之順序表。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

什么是線性表

C數(shù)據(jù)結(jié)構(gòu)-線性表之順序表

C數(shù)據(jù)結(jié)構(gòu)-線性表之順序表
C數(shù)據(jù)結(jié)構(gòu)-線性表之順序表

線性表的插入元素

C數(shù)據(jù)結(jié)構(gòu)-線性表之順序表
C數(shù)據(jù)結(jié)構(gòu)-線性表之順序表

線性表的刪除元素

C數(shù)據(jù)結(jié)構(gòu)-線性表之順序表
C數(shù)據(jù)結(jié)構(gòu)-線性表之順序表

線性表順序存儲(chǔ)的缺點(diǎn)

C數(shù)據(jù)結(jié)構(gòu)-線性表之順序表

線性表的特點(diǎn)

C數(shù)據(jù)結(jié)構(gòu)-線性表之順序表

1.線性表的實(shí)例

首先我們創(chuàng)建3個(gè)文件,分別如下:
liner_data
--sqlist.c
--sqlist.h
--test.c

sqlist.h
// .h文件中定位數(shù)據(jù)的結(jié)構(gòu)以及函數(shù)的方法
typedef int data_t;
#define N 128  //定義一個(gè)宏

typedef struct {
    data_t data[N];
    int last;
} sqlist, *sqlink;

sqlink list_create();
int list_clear(sqlink L);
int list_free(sqlink L);
int list_empty(sqlink L);
int list_length(sqlink L);
int list_locate(sqlink L, data_t value);
int list_insert(sqlink L, data_t value, int pos);
int list_show(sqlink L);

int list_merge(sqlink L1, sqlink L2);
int list_purge(sqlink L);
int list_show(sqlink L);

下面編寫sqlist.c文件:函數(shù)實(shí)現(xiàn)的功能

//
// Created by Lenovo on 2023/9/9.
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "sqlist.h"

sqlink list_create(){
    // malloc
    sqlink L;

    L = (sqlink)malloc(sizeof(sqlist));
    if(L == NULL){
        printf("list malloc failed\n");
        return L;
    }

    // initialize
    memset(L, 0, sizeof(sqlist)); // 向數(shù)組中除了最后一個(gè),其他全部初始化為0
    L->last = -1;
    return L;
}

int list_clear(sqlink L){
    /*
     * @return: 0-success   -1-failed
     */
    if(L == NULL){
        return -1;
    }
    memset(L, 0, sizeof(sqlist));
    L->last = -1;
    return 0;
}

int list_free(sqlink L){
    if(L==NULL)
        return -1;
    free(L);  // 刪除堆內(nèi)存
    L=NULL;
    return 0;
}

/*
 * list_empty: Is list empty?
 * para L: list
 * @return: 1-empty   0-not empty
 */
int list_empty(sqlink L){
    if(L->last == -1)
        return 1;
    else
        return 0;
}

int list_length(sqlink L){
    if(L==NULL)
        return -1;
    return (L->last+1);
}

/*
 * @ret  -1--not exist   pos
 * */
int list_locate(sqlink L, data_t value){
	int i ;
	for (i = 0; i <= L->last; i++) {
		if (L->data[i] == value) 
			return i;
	}

	return -1;
}

int list_insert(sqlink L, data_t value, int pos){
    int i;
    // 判斷是否滿了full?
    if(L->last == N-1){
        printf("list is full\n");
        return -1;
    }
    // check para    0<=pos<=last+1     [0, last+1]
    if(pos<0 || pos>L->last+1){
        printf("Pos is invalid\n");
        return -1;
    }
    //move
    for (i=L->last; i>=pos; i--){
        L->data[i+1] = L->data[i];
    }
    // update value last
    L->data[pos] = value;
    L->last++;
    return 0;
}

int list_show(sqlink L){
    int i;
    if (L==NULL)
        return -1;
    if(L->last == -1)
        printf("list is empty\n");
    for(i=0; i<=L->last; i++){
        printf("%d ", L->data[i]);
    }
    puts(""); // 自動(dòng)換行
    return 0;
}

int list_delete(sqlink L, int pos) {
	int i;

	if (L->last == -1) {
		printf("list is empty\n");
		return -1;
	}

	//pos [0, last]
	if (pos < 0 || pos > L->last) {
		printf("delete pos is invalid\n");
		return -1;
	}

	//move  [pos+1, last]
	for (i = pos+1; i <= L->last; i++) {
		L->data[i-1] = L->data[i];
	}

	//update
	L->last--;

	return 0;
}

int list_merge(sqlink L1, sqlink L2) {
	int i = 0;
	int ret;

	while (i <= L2->last){
		ret = list_locate(L1, L2->data[i]);
		if (ret == -1) {
			if (list_insert(L1, L2->data[i], L1->last+1) == -1) 
				return -1;
		}

		i++;
	}
	return 0;
}

int list_purge(sqlink L) {
	int i;
	int j;

	if (L->last == 0)
		return 0;

	i = 1;
	while (i <= L->last) {
		j = i-1;
		while (j >= 0) {
			if (L->data[i] == L->data[j]) {
				list_delete(L, i);
				break;
			} else {
				j--;
			}
		}

		if ( j < 0) {
			i++;
		}
	}

	return 0;
}

test.c文件:main函數(shù)的執(zhí)行入口

//
// Created by Lenovo on 2023/9/9.
//
#include <stdio.h>
#include "sqlist.h"

void test_insert();
void test_delete();
void test_merge();
void test_purge();

int main(int argc, const char *argv[])
{
	//test_insert();
	//test_delete();
	//test_merge();
	test_purge();

	return 0;
}

void test_insert() {
	sqlink L;
	
	L = list_create();
	if (L == NULL) 
		return;

	list_insert(L, 10, 0);
	list_insert(L, 20, 0);
	list_insert(L, 30, 0);
	list_insert(L, 40, 0);
	list_insert(L, 50, 0);
	list_insert(L, 60, 0);

	list_show(L);
	//list_insert(L, 100, list_length(L));
	list_insert(L, 100, -1000);
	list_show(L);
	list_free(L);
}

void test_delete() {
	sqlink L;
	
	L = list_create();
	if (L == NULL) 
		return;

	list_insert(L, 10, 0);
	list_insert(L, 20, 0);
	list_insert(L, 30, 0);
	list_insert(L, 40, 0);
	list_insert(L, 50, 0);
	list_insert(L, 60, 0);

	list_show(L);
	list_delete(L, 9);
	list_show(L);

	list_free(L);
}

void test_merge() {
	sqlink L1, L2;

	L1 = list_create();
	if (L1 == NULL) 
		return;

	L2 = list_create();
	if (L2 == NULL) 
		return;

	list_insert(L1, 10, 0);
	list_insert(L1, 20, 0);
	list_insert(L1, 30, 0);
	list_insert(L1, 40, 0);

	list_insert(L2, 50, 0);
	list_insert(L2, 20, 0);
	list_insert(L2, 90, 0);
	list_insert(L2, 40, 0);

	list_show(L1);
	list_show(L2);
	printf("********************\n");
	list_merge(L1, L2);
	list_show(L1);
	list_show(L2);
}

void test_purge() {
	sqlink L;
	
	L = list_create();
	if (L == NULL) 
		return;

	list_insert(L, 10, 0);
	list_insert(L, 10, 0);
	list_insert(L, 10, 0);
	list_insert(L, 10, 0);
	list_insert(L, 10, 0);
	list_insert(L, 10, 0);

	list_show(L);
	list_purge(L);
	list_show(L);

	list_free(L);
}

2.執(zhí)行步驟

2.1 使用gcc進(jìn)行編譯

c語言程序編譯的過程如下:

預(yù)編譯-編譯-匯編-連接
匯編:gcc -c sqlist.c -o sqlist.o
gcc -c test.c -o test.o
連接:可執(zhí)行文件:gcc sqlist.o test.o -o test

以上3步可直接等價(jià)于:gcc *.c -o test
程序運(yùn)行成功:
C數(shù)據(jù)結(jié)構(gòu)-線性表之順序表文章來源地址http://www.zghlxwxcb.cn/news/detail-702651.html

到了這里,關(guān)于C數(shù)據(jù)結(jié)構(gòu)-線性表之順序表的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【數(shù)據(jù)結(jié)構(gòu)】線性表(一)線性表的定義及其基本操作(順序表插入、刪除、查找、修改)

    【數(shù)據(jù)結(jié)構(gòu)】線性表(一)線性表的定義及其基本操作(順序表插入、刪除、查找、修改)

    目錄 一、線性表 1. 線性表的定義 2. 線性表的要素 二、線性表的基本操作 三、線性表的順序存儲(chǔ)結(jié)構(gòu) 1. 定義 2. 順序表的操作? ? ?? a. 插入操作 b. 刪除操作 c. 查找操作 d. 修改操作 e. 代碼實(shí)例 ??????? ?一個(gè)線性表是由零個(gè)或多個(gè) 具有相同類型的結(jié)點(diǎn) 組成的有序集合。

    2024年02月03日
    瀏覽(99)
  • 【數(shù)據(jù)結(jié)構(gòu)】(順序表)C語言實(shí)現(xiàn)線性表順序存儲(chǔ)的創(chuàng)建、插入、刪除、查找、輸出等基本操作(附完整代碼)

    要求:利用書本上的線性表的順序存儲(chǔ)結(jié)構(gòu)定義 #define MAXSIZE 100 //順序表可能達(dá)到的最大長度 typedef struct{ ElemType *elem; // 存儲(chǔ)空間基址 int length; // 當(dāng)前長度 int listsize; // 當(dāng)前分配的存儲(chǔ)容量(以sizeof(ElemType)為單位) } SqList; 1)編寫完成下列功能的函數(shù): (1)初始化一個(gè)線性表

    2024年04月28日
    瀏覽(99)
  • 【數(shù)據(jù)結(jié)構(gòu)】線性表之鏈表

    【數(shù)據(jù)結(jié)構(gòu)】線性表之鏈表

    上一篇文章講述了線性表中的順序表,這篇文章講述關(guān)于鏈表的定義、類別、實(shí)現(xiàn)、多種不同鏈表的優(yōu)缺點(diǎn)和鏈表與順序表的優(yōu)缺點(diǎn)。 關(guān)于上一篇文章的鏈接:線性表之順序表 鏈表是一種物理存儲(chǔ)結(jié)構(gòu)上 非連續(xù)、非順序 的存儲(chǔ)結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針

    2024年02月05日
    瀏覽(102)
  • 【數(shù)據(jù)結(jié)構(gòu)】線性表之棧、隊(duì)列

    【數(shù)據(jù)結(jié)構(gòu)】線性表之棧、隊(duì)列

    前面兩篇文章講述了關(guān)于線性表中的順序表與鏈表,這篇文章繼續(xù)講述線性表中的 棧和隊(duì)列。 這里講述的兩種線性表與前面的線性表不同,只允許在一端入數(shù)據(jù),一段出數(shù)據(jù),詳細(xì)內(nèi)容請(qǐng)看下面的文章。 順序表與鏈表兩篇文章的鏈接: 線性表之順序表 線性表之鏈表 注意:

    2024年02月06日
    瀏覽(94)
  • 數(shù)據(jù)結(jié)構(gòu):線性表之-單向鏈表(無頭)

    數(shù)據(jù)結(jié)構(gòu):線性表之-單向鏈表(無頭)

    目錄 什么是單向鏈表 順序表和鏈表的區(qū)別和聯(lián)系 順序表: 鏈表: 鏈表表示(單項(xiàng))和實(shí)現(xiàn) 1.1 鏈表的概念及結(jié)構(gòu) 1.2單鏈表(無頭)的實(shí)現(xiàn) 所用文件 將有以下功能: 鏈表定義 創(chuàng)建新鏈表元素 尾插 頭插 尾刪 頭刪 查找-給一個(gè)節(jié)點(diǎn)的指針 改 pos位置之前插入 刪除pos位置的值 成品

    2024年02月09日
    瀏覽(96)
  • 數(shù)據(jù)結(jié)構(gòu):線性表之-循環(huán)雙向鏈表(萬字詳解)

    數(shù)據(jù)結(jié)構(gòu):線性表之-循環(huán)雙向鏈表(萬字詳解)

    目錄 基本概念 1,什么是雙向鏈表 2,與單向鏈表的區(qū)別 雙向鏈表詳解 功能展示: 1. 定義鏈表 2,創(chuàng)建雙向鏈表 3,初始化鏈表 4,尾插 5,頭插 6,尾刪 判斷鏈表是否被刪空 尾刪代碼 7,頭刪 8,pos位置之前插入 優(yōu)化后的頭插 優(yōu)化后的尾插 9,刪除pos位置的節(jié)點(diǎn) 優(yōu)化后的尾刪 優(yōu)

    2024年02月09日
    瀏覽(23)
  • C語言數(shù)據(jù)結(jié)構(gòu)——線性表之棧和隊(duì)列

    C語言數(shù)據(jù)結(jié)構(gòu)——線性表之棧和隊(duì)列

    為什么會(huì)定義棧和隊(duì)列這兩種數(shù)據(jù)結(jié)構(gòu)呢? 原因在于: 之所以會(huì)定義棧和隊(duì)列這樣的數(shù)據(jù)結(jié)構(gòu) 是因?yàn)樗麄冇袃纱筇匦?: 第一: 他們可以保存程序運(yùn)行路徑中各個(gè)點(diǎn)的信息,以便用于回溯操作或其他需要訪問已經(jīng)訪問過的節(jié)點(diǎn)信息的操作。 比如: 棧用于解決迷宮問題,就

    2023年04月11日
    瀏覽(95)
  • 數(shù)據(jù)結(jié)構(gòu)第三課 -----線性表之雙向鏈表

    數(shù)據(jù)結(jié)構(gòu)第三課 -----線性表之雙向鏈表

    ?? ?????????????????????? ??? 作者介紹: ???? ?? ?????????????? ?? ??作者id:老秦包你會(huì), ?? 簡單介紹:?????????????????????????????? 喜歡學(xué)習(xí)C語言和python等編程語言,是一位愛分享的博主,有興趣的小可愛可以來互討 ????

    2024年02月05日
    瀏覽(94)
  • 【數(shù)據(jù)結(jié)構(gòu)】線性表之單鏈表(講解實(shí)現(xiàn)——帶動(dòng)圖理解)

    【數(shù)據(jù)結(jié)構(gòu)】線性表之單鏈表(講解實(shí)現(xiàn)——帶動(dòng)圖理解)

    單鏈表的優(yōu)點(diǎn) 1.頭部和中間插入或刪除數(shù)據(jù)效率高,無需挪動(dòng)。 2.按照需求申請(qǐng)釋放空間,無需擔(dān)心空間不夠用。 單鏈表的缺點(diǎn) 1.不可以進(jìn)行下標(biāo)隨機(jī)訪問。 2.復(fù)雜度是O(n) 3.反向遍歷困難 單鏈表是線性表的一種,單鏈表是鏈?zhǔn)酱鎯?chǔ)的線性表,不同于單鏈表, 鏈表在內(nèi)存空間

    2024年02月06日
    瀏覽(98)
  • 數(shù)據(jù)結(jié)構(gòu)三:線性表之單鏈表(帶頭結(jié)點(diǎn)單向)的設(shè)計(jì)與實(shí)現(xiàn)

    數(shù)據(jù)結(jié)構(gòu)三:線性表之單鏈表(帶頭結(jié)點(diǎn)單向)的設(shè)計(jì)與實(shí)現(xiàn)

    ? ? ? ? 線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)正是所謂的單鏈表,何謂單鏈表?通過地址將每一個(gè)數(shù)據(jù)元素串起來,進(jìn)行使用,這可以彌補(bǔ)順序表在進(jìn)行任意位置的插入和刪除需要進(jìn)行大量的數(shù)據(jù)元素移動(dòng)的缺點(diǎn),只需要修改指針的指向即可;單鏈表的種類又可劃分為很多種,本篇博客詳

    2024年02月19日
    瀏覽(107)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包