数据结构实验1

实验1:

#include<stdio.h>         //线性表:顺序存储结构
#include<string.h>
#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<L.length){
        for(k=i;k<=L.length;k++){
            L.data[k-1]=L.data[k];
        }
    }
    printf("删除成功,删除元素下标为:%d . 删除元素为:%d\n",i,e);
    L.length--;
    return OK;
}
Status ListShow(Sqlist &L){
    int temp;
    if(L.length==0){
        printf("访问的线性表为空\n");
        return ERROR;
    }
    for(int i=1;i<=L.length;i++){
        GetElem(L,i,temp);
        printf("%d%c",temp,i==L.length?'\n':' ');
    }
    printf("\n");
    return OK;
}
int main()
{
    Sqlist L;
    int a[]={1,2,3,4,5,6,7},ans,temp;
    memcpy(L.data,a,sizeof(a));
    L.length=7;
    //历遍
    ListShow(L);
    //询问
    GetElem(L,3,temp);
    printf("询问:下标为%d,   大小:%d\n",3,temp);
    //删除
    ListDelete(L,3,temp);
    ListShow(L);
    //插入
    ListInsert(L,3,3);

    return 0;
}
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#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&&j<i){
        p=p->next;
        j++;
    }
    if(!p||i<j){
        if(!p){
            printf("错误提示:所给下标的值:%d ,比链表长度:%d要长",i,j);
        }else if(i<j){
            printf("错误提示:所给下标的值:%d不合法",i);
        }
        return ERROR;
    }
    e=p->data;
    printf("询问成功!!!\n");
    return OK;
}
/*
插入环节:找到对应的下标,插入元素。
注意要抛出不合法的情况。
*/
Status ListInsert(LinkList *head,int i,ElemType e){
    int j=1;
    LinkList p=*head;

    while(p&&j<i){
        p=p->next;
        j++;
    }

    if(!p||i<j){
        if(!p){
            printf("错误提示:所给下标的值:%d ,比链表长度:%d要长",i,j);
        }else if(i<j){
            printf("错误提示:所给下标的值:%d不合法",i);
        }
        return ERROR;
    }

    LinkList s=(LinkList)(malloc(sizeof(Node)));

    s->data=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)&&(j<i-1)  ){
        p=p->next;
        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;
}

猜你喜欢

转载自blog.csdn.net/Z_sea/article/details/82750171