数据结构实验1

实验1:

#include         //线性表:顺序存储结构
#include
#define MAXSIZE 9
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int ElemType;
typedef int Status;
typedef struct Sqlist{
    ElemType data[MAXSIZE];
    int length;
    Sqlist(){
        length=0;
    }
}Sqlist;
Status ListShow(Sqlist &L);
/* 重置为空表——清空*/
Status ListClear(Sqlist &L){
    memset(L.data,0,sizeof(L.data));
    L.length=0;
    return OK;
}
/* 获取某个下标的元素的值——查询*/
Status GetElem(const Sqlist &L,const int &i,ElemType &e){
    if(L.length==0||i<1||i>L.length){
        printf("询问时:下标 %d,不合法。\n",i);
        return ERROR;
    }
    e=L.data[i-1];
    return OK;
}
/* 指定某个位置插入某元素——插入*/
Status ListInsert(Sqlist &L,int i,ElemType e){
    int k,len=L.length,temp;
    if(len>=MAXSIZE){
        printf("错误提醒:线性表已满\n\n");
        return ERROR;
    }else if(i<1||i>len+1){
        printf("错误提醒:所插入的位置%d ,位置不合法\n\n",i);
        return ERROR;
    }else if(i<=len){
        for(k=len-1;k>=i-1;k--){
            L.data[k+1]=L.data[k];
        }
    }
    L.data[i-1]=e;
    L.length++;
    printf("下标为:%d , 元素为:%d ,插入元素成功\n\n",i,e);
    /*检查每个位置元素*/
    ListShow(L);
    printf("\n");
    return TRUE;
}
/*删除指定下标的某个元素*/
Status ListDelete(Sqlist &L,int i,ElemType &e){
    int k;
    if(L.length==0){
        printf("线性表为空\n");
        return ERROR;
    }
    if(i<1||i>L.length){
        printf("错误提示:删除的下标:%d\n",i);
        return ERROR;
    }
    e=L.data[i-1];
    if(i
#include
#include
#include
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;
typedef int ElemType ;
typedef struct Node {
    ElemType data;
    struct Node *next;
}Node;
typedef struct Node * LinkList;
/*
询问环节,通过历遍整个链表来找到对应下标的元素。
注意抛出不合法情况。
*/
Status GetElem(LinkList head,int i,ElemType &e)
{
    int j=1;
    LinkList p;
    p=head->next;
    while(p&&jnext;
        j++;
    }
    if(!p||idata;
    printf("询问成功!!!\n");
    return OK;
}
/*
插入环节:找到对应的下标,插入元素。
注意要抛出不合法的情况。
*/
Status ListInsert(LinkList *head,int i,ElemType e){
    int j=1;
    LinkList p=*head;

    while(p&&jnext;
        j++;
    }

    if(!p||idata=e;
    s->next=p->next;
    p->next=s;
    printf("插入成功!!!\n");
    return OK;

}
Status ListDelete(LinkList &L,int i,ElemType &e){
    int j=0;
    LinkList p=L;
    while(  (p->next)&&(jnext;
        j++;
    }
    if(     (!p)    ||  (j>i-1)  ){
        printf("删除失败!!!\n所删除的下标为:%d\n",i);
        return ERROR;

    }
    LinkList q=p->next;
             p->next=q->next;
    e=q->data;
    free(q);
    printf("删除:下标:%d    元素:%d\n",i,e);
    return OK;
}
Status ListShow(LinkList &L){
    LinkList p=L->next;
    if(!(p->next)){
        printf("所在的链式线性表为空\n");
        return ERROR;
    }
    while(p->next){
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
    return OK;
}
int main()
{
    int e;
    LinkList head =(LinkList)malloc(sizeof(Node));
    LinkList s1=(LinkList)malloc(sizeof(Node));
    s1->data=4;
    s1->next=NULL;
    head->next=s1;
    ListInsert(&head,1,2);
    ListInsert(&head,2,3);
    ListInsert(&head,2,7);
    ListInsert(&head,3,5);
    GetElem(head,3,e);
    printf("询问:下标:%d    元素:%d\n",3,e);
    ListDelete(head,2,e);
    return 0;
}

 

你可能感兴趣的:(数据结构,数据结构)