6-5 顺序表操作集 (20 分)(创建,查找,插入,删除)以及顺序表的理解
順序表: 線性表的順序存儲
線性表的順序存儲是指在內存中用地址連續的一塊存儲空間順序存放線性表的各元素
在程序設計語言中,一維數組在內存中占用的存儲空間就是一組連續的存儲區域,因此,用一維數組來表示順序存儲的數據區域是再合適不過的
考慮到線性表的運算有插入和刪除等,即表的長度是動態可變的
所以,數組的容量需設計的足夠大
Data[MAXSIZE]其中MAXSIZE是一個根據實際問題定義的足夠大的整數
線性表中的數據從Data[0]開始依次順序存放
因為當前線性表中的實際元素個數可能沒達到MAXSIZE多個,因此用一個變量Last來記錄當前線性表中最后一個元素在數組中的位置
即Last起一個指針的作用(實際是數組下標),始終指向線性表中的最后一個元素
表空時Last=-1
表長為Last+1
為了體現數據組織的整體性,通常將數組Data和變量Last封裝成一個結構作為順序表的類型
這樣,我們可以利用List定義線性表L:List L;
本題要求實現順序表的操作集。
函數接口定義:
其中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 分)(创建,查找,插入,删除)以及顺序表的理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vba怎么快速填充序列号vba 填充
- 下一篇: 7-11 堆栈操作合法性 (20 分)以