C语言实现顺序表

来源:互联网 发布:linux ftp知识总结 编辑:程序博客网 时间:2024/05/17 09:27

C语言实现的顺序表完整代码。

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <stdbool.h>#include <assert.h>#define STRLEN 10#define SIZE 4#define INCREMENT 2typedef struct StudentRecord{    int id;    char name[STRLEN];    char sex[STRLEN];} StudentRecord;typedef struct SqlList{    int length;//顺序表的长度    int size;//数组的长度    StudentRecord* base;} SqlList;void setStudentRecord(StudentRecord* record, int id, char* name, char* sex);void printRecord(StudentRecord* record);void initSqlList(SqlList* list);void destorySqlList(SqlList* list);bool isEmpty(SqlList list);int length(SqlList list);void insertSqlList(SqlList* list, int index, StudentRecord record);typedef void function(StudentRecord* record);void listTraverse(SqlList* list, function visit);void deleteSqlList(SqlList* list, int index);int main(){    StudentRecord s0;    StudentRecord s1;    StudentRecord s2;    StudentRecord s3;    StudentRecord s4;    StudentRecord s5;    StudentRecord s6;    StudentRecord s7;    setStudentRecord(&s0,101,"张三","男");    setStudentRecord(&s1,102,"Marry","Female");    setStudentRecord(&s2,103,"Bob","Male");    setStudentRecord(&s3,104,"Tim","Male");    setStudentRecord(&s4,105,"Sony","Male");    setStudentRecord(&s5,106,"Bob","Male");    setStudentRecord(&s6,107,"Tim","Male");    setStudentRecord(&s7,108,"Sony","Male");    SqlList list;    initSqlList(&list);    insertSqlList(&list,0,s0);    insertSqlList(&list,0,s1);    insertSqlList(&list,0,s2);    insertSqlList(&list,0,s3);    insertSqlList(&list,0,s4);    insertSqlList(&list,0,s5);    insertSqlList(&list,0,s6);    insertSqlList(&list,0,s7);    printf("表长为:%d\n",length(list));    listTraverse(&list,printRecord);    deleteSqlList(&list, 3);    printf("表长为:%d\n",length(list));    listTraverse(&list,printRecord);    destorySqlList(&list);    printf("表长为:%d\n",length(list));    return 0;}void setStudentRecord(StudentRecord* record, int id, char*name,char* sex){    record->id = id;    strcpy(record->name,name);    strcpy(record->sex,sex);}void printRecord(StudentRecord* record){    printf("%d,%s,%s\n",record->id,record->name,record->sex);}void initSqlList(SqlList* list){    list->size = SIZE;    list->length = 0;    list->base = (StudentRecord*)malloc(sizeof(StudentRecord)*list->size);}void destorySqlList(SqlList* list){    free(list);    list->size = 0;    list->length = 0;    list->base = NULL;}bool isEmpty(SqlList list){    if(list.length == 0)    {        return true;    }    else    {        return false;    }}int length(SqlList list){    return list.length;}void insertSqlList(SqlList* list, int index, StudentRecord record){    assert(index>=0 && index<=list->length);//判断需要插入的位置是否合法    if(list->size == list->length)    {        list->size += INCREMENT;//如果表长和数组的长度相等,则需要扩容        list->base = realloc(list->base,sizeof(StudentRecord)*list->size);    }    for(int i=list->length-1; i>=index; i--)    {        list->base[i+1] = list->base[i];//将插入位置之后的元素依次向后推移    }    list->base[index] = record;    list->length++;}void deleteSqlList(SqlList* list, int index){    assert(index>=0 && index<=list->length);//判断需要删除的元素的位置是否合法    for(int i=index; i<=list->length; i++)    {        list->base[i] = list->base[i+1];//将带删除位置以后的元素一次向前移动    }    list->length--;}void listTraverse(SqlList* list, function visit) //传入的是一个函数指针,方便以后同类的打印函数的修改{    for(int i=0; i<list->length; i++)    {        visit(&list->base[i]);    }}
参考地址:http://www.bilibili.com/video/av2965301/


0 0
原创粉丝点击