日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

6-5 顺序表操作集 (20 分)(创建,查找,插入,删除)以及顺序表的理解

發布時間:2023/12/4 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 6-5 顺序表操作集 (20 分)(创建,查找,插入,删除)以及顺序表的理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

順序表: 線性表的順序存儲

線性表的順序存儲是指在內存中用地址連續的一塊存儲空間順序存放線性表的各元素

  • 在程序設計語言中,一維數組在內存中占用的存儲空間就是一組連續的存儲區域,因此,用一維數組來表示順序存儲的數據區域是再合適不過的

  • 考慮到線性表的運算有插入和刪除等,即表的長度是動態可變的
    所以,數組的容量需設計的足夠大

  • Data[MAXSIZE]其中MAXSIZE是一個根據實際問題定義的足夠大的整數
    線性表中的數據從Data[0]開始依次順序存放
    因為當前線性表中的實際元素個數可能沒達到MAXSIZE多個,因此用一個變量Last來記錄當前線性表中最后一個元素在數組中的位置
    即Last起一個指針的作用(實際是數組下標),始終指向線性表中的最后一個元素
    表空時Last=-1

  • 表長為Last+1

  • 為了體現數據組織的整體性,通常將數組Data和變量Last封裝成一個結構作為順序表的類型

  • typedef int Position; typedef struct LNode *PtrToLNode; struct LNode {ElementType Data[MAXSIZE];Position Last; }; typedef PtrToLNode List;
  • 由于LNode是一個包含數組的結構,當我們實現各種針對順序表的操作時,直接將該結構作為函數參數傳遞顯然不是一個好辦法,使用結構指針的傳遞效率更高,所以我們把List定義為結構指針。
    這樣,我們可以利用List定義線性表L:List L;
  • 本題要求實現順序表的操作集。
    函數接口定義:

    List MakeEmpty(); Position Find( List L, ElementType X ); bool Insert( List L, ElementType X, Position P ); bool Delete( List L, Position P );

    其中List結構定義如下:

    typedef int Position; typedef struct LNode *List; struct LNode {ElementType Data[MAXSIZE];Position Last; /* 保存線性表中最后一個元素的位置 */ };

    各個操作函數的定義為:

    List MakeEmpty():創建并返回一個空的線性表;

    Position Find( List L, ElementType X ):返回線性表中X的位置。若找不到則返回ERROR;

    bool Insert( List L, ElementType X, Position P ):將X插入在位置P并返回true。若空間已滿,則打印“FULL”并返回false;如果參數P指向非法位置,則打印“ILLEGAL POSITION”并返回false;

    bool Delete( List L, Position P ):將位置P的元素刪除并返回true。若參數P指向非法位置,則打印“POSITION P EMPTY”(其中P是參數值)并返回false。

    裁判測試程序樣例:

    #include <stdio.h> #include <stdlib.h>#define MAXSIZE 5 #define ERROR -1 typedef enum {false, true} bool; typedef int ElementType; typedef int Position; typedef struct LNode *List; struct LNode {ElementType Data[MAXSIZE];Position Last; /* 保存線性表中最后一個元素的位置 */ };List MakeEmpty(); Position Find( List L, ElementType X ); bool Insert( List L, ElementType X, Position P ); bool Delete( List L, Position P );int main() {List L;ElementType X;Position P;int N;L = MakeEmpty();scanf("%d", &N);while ( N-- ) {scanf("%d", &X);if ( Insert(L, X, 0)==false )printf(" Insertion Error: %d is not in.\n", X);}scanf("%d", &N);while ( N-- ) {scanf("%d", &X);P = Find(L, X);if ( P == ERROR )printf("Finding Error: %d is not in.\n", X);elseprintf("%d is at position %d.\n", X, P);}scanf("%d", &N);while ( N-- ) {scanf("%d", &P);if ( Delete(L, P)==false )printf(" Deletion Error.\n");if ( Insert(L, 0, P)==false )printf(" Insertion Error: 0 is not in.\n");}return 0; }/* 你的代碼將被嵌在這里 */

    輸入樣例:

    6 1 2 3 4 5 6 3 6 5 1 2 -1 6

    輸出樣例:

    FULL Insertion Error: 6 is not in. Finding Error: 6 is not in. 5 is at position 0. 1 is at position 4. POSITION -1 EMPTY Deletion Error. FULL Insertion Error: 0 is not in. POSITION 6 EMPTY Deletion Error. FULL Insertion Error: 0 is not in.

    代碼:

    List MakeEmpty() {List L=(List)malloc(sizeof(struct LNode));L->Last=-1;return L; }Position Find( List L, ElementType X ) {for(int i=0;i<=L->Last;i++)//注意i從0到L->Last {if(L->Data[i]==X) return i;}return ERROR; }bool Insert( List L, ElementType X, Position P ) {if(L->Last==MAXSIZE-1)//注意MAXSIZE-1 {printf("FULL");return false;}if(P<0||P>(L->Last+1)) {printf("ILLEGAL POSITION");return false; }int i;for(i=L->Last+1;i>P;i--)//這個是插入,所以i從L->Last+1開始 {L->Data[i]=L->Data[i-1];}L->Data[i]=X;L->Last++;return true; }bool Delete( List L, Position P ) {Position j;if(P<0||P>(L->Last)){printf("POSITION %d EMPTY",P);return false;}for(j=P;j<L->Last;j++)//因為是刪除,所以j不可能等于L->Last {L->Data[j]=L->Data[j+1];}L->Last--;return true; } 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的6-5 顺序表操作集 (20 分)(创建,查找,插入,删除)以及顺序表的理解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。