数据结构-顺序表(C语言)

来源:互联网 发布:咸安淘宝开店培训学校 编辑:程序博客网 时间:2024/05/21 13:56

SeqList.h

#include<stdio.h>#include<string.h>#define MAXSIZE 100typedef struct{    DATA ListData[MAXSIZE+1]; //保存顺序表的数组     int ListLen;     //顺序表长度 }SeqListType;void SeqListInit(SeqListType *SL); //初始化顺序表int SeqListLength(SeqListType *SL);  //返回顺序表的元素数量 int SeqListAdd(SeqListType *SL,DATA data); //向顺序表中添加元素 int SeqListInsert(SeqListType *SL,int n,DATA data); //向顺序表中插入元素 int SeqListDelete(SeqListType *SL,int n);  //删除顺序表中的据元素 DATA *SeqListFindByNum(SeqListType *SL,int n);  //根据序号返回元素int SeqListFindByCont(SeqListType *SL,char *key); //按关键字查找 int SeqListAll(SeqListType *SL);//遍历顺序表中的内容 

SeqList.c

void SeqListInit(SeqListType *SL) //初始化顺序表{    SL->ListLen=0;//设定表长度 }int SeqListLength(SeqListType *SL) //返回顺序表的元素数量 {    return (SL->ListLen);}int SeqListAdd(SeqListType *SL,DATA data) //向顺序表中添加元素 {    if(SL->ListLen>=MAXSIZE)    {        printf("顺序表已满\n");        return 0;    }    SL->ListData[++SL->ListLen]=data;//保存数据到表尾     return 1;}int SeqListInsert(SeqListType *SL,int n,DATA data) //向顺序表中插入元素 {    if(SL->ListLen>=MAXSIZE)//节点数量超过最大数量     {        printf("顺序表已满\n");        return 0;    }    if(n<1||n>SL->ListLen-1)    {        printf("插入节点序号错误\n");        return 0;    }    int i;    for(i=SL->ListLen;i>=n;i--)//插入点之后的数据后移一位 从后往前         SL->ListData[i+1]=SL->ListData[i];    SL->ListData[n]=data;//插入节点     SL->ListLen++;//表长度+1     return 1;}int SeqListDelete(SeqListType *SL,int n)  //删除顺序表中的数据元素 {    if(n<1||n>SL->ListLen+1)    {        printf("删除节点错误\n");        return 0;    }    int i;    for( i=n;i<SL->ListLen;i++)//数据前移         SL->ListData[i]=SL->ListData[i+1];    SL->ListLen--;//表长度-1     return 1;}DATA *SeqListFindByNum(SeqListType *SL,int n)  //根据序号返回元素{    if(n<1||n>SL->ListLen+1)    {        printf("节点序号错误\n");        return NULL;    }    return &(SL->ListData[n]);}int SeqListFindByCont(SeqListType *SL,char *key) //按关键字查找 {    int i;    for( i=1;i<=SL->ListLen;i++)        if(strcmp(SL->ListData[i].key,key)==0)return i;    return 0;   }

SeqListTest.c

#include<stdio.h>typedef struct{    char key[15];    char name[20];    int age;}DATA;#include"SeqList.h"#include"SeqList.c"int SeqListAll(SeqListType *SL)   //遍历顺序表{    int i;    for(i=1;i<=SL->ListLen;i++)    {        printf("(%s,%s,%d)\n",SL->ListData[i].key,SL->ListData[i].name,SL->ListData[i].age);    }}int main(){    SeqListType SL;    DATA data,*data1;    char key[15];    SeqListInit(&SL);    do{        printf("Input key,name,age:");        fflush(stdin);//清空缓冲区         scanf("%s%s%d",&data.key,&data.name,&data.age);        if(data.age){    //年龄不为零时 添加             if(!SeqListAdd(&SL,data))break;        }        else break;    }while(1);    printf("\n节点顺序为:\n");    SeqListAll(&SL);    fflush(stdin);      printf("\n取出的节点序号:");       int i;    scanf("%d",&i);    data1=SeqListFindByNum(&SL,i);    if(data1)        printf("第%d节点是:(%s,%s,%d)\n",i,data1->key,data1->name,data1->age);    fflush(stdin);    printf("\ninput key:");    scanf("%s",&key);       i=SeqListFindByCont(&SL,key);//  printf("%d",i);    data1=SeqListFindByNum(&SL,i);    if(data1)        printf("第%d节点是:(%s,%s,%d)\n",i,data1->key,data1->name,data1->age);      getch();    return 0;}
0 0
原创粉丝点击