顺序表操作集

来源:互联网 发布:淘宝每日好店在哪里看 编辑:程序博客网 时间:2024/05/19 00:14
#include <stdio.h>#include <stdlib.h>#define MAXSIZE 5#define ERROR -1typedef enum {false, true} bool;typedef int ElementType;typedef int Position;typedef struct LNode *List;struct LNode {    ElementType Data[MAXSIZE];    Position Last; /* 保存线性表中最后一个元素的位置 */};List MakeEmpty(){    List head = (List)malloc(sizeof(struct LNode));    head->Last=-1;    return head;}Position Find( List L, ElementType X ){    int i;    for(i=0;i<=L->Last;i++){        if(L->Data[i]==X){            return i;        }    }    return ERROR;}bool Insert( List L, ElementType X, Position P ){//插入的位置为负,插入的位置比最后一个元素加一还大,表满了,三种情况插入失败。    if(L->Last==MAXSIZE-1){        printf("FULL");        return false;    }    if(P<0 || P > L->Last+1){        printf("ILLEGAL POSITION");        return false;    }    int i;    for(i=L->Last;i>=P;i--){        L->Data[i+1]=L->Data[i];    }    L->Data[P]=X;    ++L->Last;    return true;}bool Delete( List L, Position P ){//空表,删除位置为空,删除位置为负数,这几种特殊情况。    if(P<0 || P > L->Last){        printf("POSITION %d EMPTY",P);        return false;    }    int i;    for(i=L->Last;i>P;i--){        L->Data[i-1]=L->Data[i];    }    --L->Last;    return true;}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);        else            printf("%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;}
原创粉丝点击