顺序表

来源:互联网 发布:淘宝网ipad保护套 编辑:程序博客网 时间:2024/06/07 22:24

数据结构顺序表

//consts.h

#include<string.h>#include<malloc.h>#include<stdlib.h>#include<stdio.h>#include<limits.h>#include<io.h>#include<math.h>#include<process.h>#define TRUR 1#define FALSE 0#define OK 1#define ERROR -1#define INFEASIBLE -1

//seqlist.h

#ifndef   MY_H_FILE      #define   MY_H_FILE     #include"consts.h"#endif  #define MAXSIZE 100typedef int DataType;typedef struct{    DataType data[MAXSIZE];    int last;}SeqList;

//seqlist.cpp

#ifndef   MY_LCPP_FILE      #define   MY_LCPP_FILE     #include"seqlist.h"#endif  //置空表void SeqListNull(SeqList *l){    l=(SeqList*)malloc(sizeof(SeqList));    l->last=-1;}//求表长int SeqLLength(SeqList *l){    return l->last+1;}//取节点DataType SeqGet(SeqList *l,int i){    if(i<1 || i>l->last+1)    {        printf("\ti的位置不正确\n");        return ERROR;    }    return l->data[i-1];}//定位int SeqLocate(SeqList *l,DataType x){    int i;    for(i=0;i<=l->last;i++)    {        if(l->data[i]==x) return (i+1);    }    return 0;}//插入操作int SeqInsert(SeqList *l,int i,DataType x){    int j;    if(i<1 || i>l->last+2)    {        printf("位置错");        return ERROR;    }    if(l->last==MAXSIZE-1)    {        printf("表满溢出");        return ERROR;    }    for(j=l->last;j>=i-1;j--)    {        l->data[j+1]=l->data[j];    }    l->data[i-1]=x;    l->last++;    return OK;}//删除操作int SeqDelete(SeqList *l,int i){    int j;    if(l->last==-1)    {        printf("表空");        return -1;    }    if(i<1 || i>l->last+1)    {        printf("位置错");        return -1;    }    for(j=i;j<=l->last;j++)    {        l->data[j-1]=l->data[j];    }    l->last--;    return 1;}//建立顺序表void SeqLCreate(SeqList *l){    int i,n;    printf("\t请输入表的长度:");    scanf("%d",&n);    l->last=n-1;    printf("\t依次输入表中的数据元素:\n");    for(i=0;i<n;i++)    {        printf("\t第%d个元素是:",i+1);        scanf("%d",&l->data[i]);    }}//输出顺序表void SeqLPrint(SeqList *l){    int j;    if(l->last<0)    {        printf("\t表空\n");        exit(0);    }    else    {        printf("\t表的数据如下:\n");        for(j=0;j<=l->last;j++)        {            printf(" %5d",l->data[j]);        }        printf("\b\n");    }}int main(int argc,char *argv[]){    DataType y;    SeqList *a,x;    int m,t,read=0;    a=&x;    do    {        puts("      关于顺序表的操作\n");        puts("      =======================\n");        puts("      1----置空表");        puts("      2----建表");        puts("      3----求表长");        puts("      4----取节点");        puts("      5----定位");        puts("      6----插入");        puts("      7----删除");        puts("      8----输出");        puts("      9----退出");        printf("     请选择代号:");        scanf("%d",&read);        switch(read)        {            case 1:SeqListNull(a);break;            case 2:SeqLCreate(a);break;            case 3:printf("\t表的长度是:%d\n",SeqLLength(a));break;            case 4:printf("\t取节点的位置是:");                scanf("%d",&m);                y=SeqGet(a,m);                if(y)                    printf("\t第%d个节点的位置是%d\n",m,y);break;            case 5:printf("\t定位的数据元素是:");                scanf("%d",&y);                t=SeqLocate(a,y);                if(t)                    printf("\t定位的数据元素位置是:%d\n",t);break;            case 6:                printf("\t插入数据元素是:");                scanf("%d",&y);                printf("\t插入位置是:");                scanf("%d",&m);                t=SeqInsert(a,m,y);                if(t)                    printf("\t插入后表的数据元素是\n");                SeqLPrint(a);break;            case 7:                printf("\t删除的位置是:");                scanf("%d",&m);                t=SeqDelete(a,m);                if(t)                    printf("\t删除后的数据元素是:\n");                SeqLPrint(a);break;            case 8:                SeqLPrint(a);break;            case 0:                 read=0;        }    }while(read!=0);    return 0;}
原创粉丝点击