数据库系统

用C语言的链表知识做了一个简单的数据库,原理简单,可以直接复制代码使用,请大佬指导

#include"consts.h"
#include<sys\stat.h>
#include<io.h>
int length = 1;
int fangwen = 0;
int visit[110] = { 0 };                                     //定义标记数组用于locate与cotinue命令
int continue1 = 0;
int go;                                                     //存储当前所指向的记录
char link1[110];
char value1[110];
char zd1[110];
char lxl[110];
typedef struct dbms_node {                                   //定义数据库类型char data[110];char type[110];struct dbms_node* next;
}DbmsLinklist;
struct dbms_point {char data[20];
};
struct dbms_point wj[200][10];            //定义结构里型的二维数组以便用来与文件交互
char men[110];                       //分别存储文件的每一行,再赋值给wj数组
char ch;                              //分别接受文件的每一个字符
int len = 0;                           //wj数组的行数,也就是数据库中记录的数目
int lie = 0;
int com = 0;                            //记录列数
int i, j, bianlen, fanlen = 0;
char member[110];
char bian[100];                          //自动生成的编号转换为相对应的字符串
char fabian[100];                         //反向存储bian数组
FILE* fp;
void Switch(char bian[], int num) {int l = 0;int n = num;while (1) {                            //把数字转换成对应的字符串并存放到bian数组中if (n == 0)break;n = num % 10;bian[l] = n + 48;l++;n = n / 10;}
}void HelpDbms() {printf("                *DBMS命令一览表*\n");printf("**,use name 使用name数据库 /use 关闭数据库 quit退出系统*\n");printf("*1,创建数据库命令语法格式 --creat databasename*\n");printf("*2,追加字段的命令 --append*\n");printf("*3,浏览数据库中所有的字段命令 --brows*\n");printf("*4,go命令语法格式 --go number (eg:go 1) 用dips浏览定位的字段 *\n");printf("*5,条件定位命令语法格式 --locate for 字段名=\"字段内容\"*\n");printf("*6,按条件删除命令语法格式 --delete for 字段名=\"字段内容\"*\n");printf("*7,全部删除命令 --zap*\n");printf("*8,按条件修改命令 --change for 字段名=\"字段内容\"*\n");printf("*9,按条件排序命令 --升序:sort on 字段名[/a] 降序:sort on 字段名/d *\n");printf("*10,打开帮助文档命令 --help *\n");
}void CreateDbmsStruct(DbmsLinklist* database[], int* length) {         //建立数据库类型char ch[110], type[110], tou[] = "编号 \0";                         //建立数据库结构时自动建立编号字段int len, i;database[0] = (DbmsLinklist*)malloc(sizeof(DbmsLinklist));strcpy(database[0]->data, tou);                                    //建立编号字段strcpy(database[0]->type, "char");                                 //建立库结构printf(".请输入字段 %d的名称 以'$'结束输入\n", *length);printf(".");scanf("%s", ch);printf(".请输入字段 %d的类型(string,int,double) \n", *length);scanf("%s", type);loop:while (1) {if (strcmp(type, "string") == 0 || strcmp(type, "double") == 0 || strcmp(type, "int") == 0) {break;}else {printf("您输入的类型非法,请重新输入\n");printf(".请输入字段 %d 的类型(string,double,int) \n", *length);scanf("%s", type);}}while (1) {                               //循环输入入库结构类型,以'$'结束if (strcmp(ch, "$") == 0)break;len = strlen(ch);ch[len] = ' ';ch[len + 1] = '\0';database[*length] = (DbmsLinklist*)malloc(sizeof(DbmsLinklist));strcpy(database[*length]->data, ch);strcpy(database[*length]->type, type);*length = *length + 1;printf(".请输入字段 %d的名称 以'$'结束输入\n", *length);printf(".");scanf("%s", ch);if (strcmp(ch, "$") == 0)break;printf(".请输入字段 %d 的类型(string,double,int) \n",* length);scanf("%s", type);goto loop;                                              //继续输入那么返回loop}for (i = 0; i < *length; i++) {printf("%s (%s) ", database[i]->data, database[i]->type);        //输入结束时驶入数据库字段和类型}
}void OpenDbms(char app[], int* com, int* len, char bian[], char fabian[]) {           //打开数据库文件并且将文件中的数据存入结构体二维数组中FILE* fp;char ch;char mem[110];int lie = 0;memset(bian, '\0', sizeof(bian));                            //开始字符型数组初始化memset(mem, '\0', sizeof(mem)); memset(fabian, '\0', sizeof(fabian));fp = fopen(app, "r+");                                       //打开相应的数据文件ch = fgetc(fp);                                              //获得文件中的每一个字符直到文件末尾
while (ch != EOF) {                                           //把获得数据按行存入到wj数组里面if (ch == ' ') {                                         //如果遇到空格就把mem复制到wj的一个单元中strcpy(wj[*len][*com].data, mem);*com = *com + 1;memset(mem, '\0', sizeof(mem));                     //把mem复制到wj的一行中初始化数组memlie = 0;}else if (ch == '\n') {                                       //如果遇到回车符则结束wj的一行,开始存储下一行*len = *len + 1;*com = 0;               //列恢复0}else {mem[lie] = ch;                                       //把在数据库文件中读出的一行存放在mem数组中lie++;}ch = fgetc(fp);                                         //获得文件的下一个字符
}
*len = *len + 1;                                           //每存完一行行数自加}void AppendDbms(char bian[], int fanlen, char fabian[], int bianlen, int* com, int* len) {   //追加记录int i, j, k=1, sum = 0;memset(bian,'\0', sizeof(bian));if (*len > 1) {                                                 //自动生成编号的值j = strlen(wj[*len - 1][0].data);for (i = j - 1; i >= 0; i--) {                               //将数据库最后一条记录的编号值转换成整型sum = sum + (wj[*len - 1][0].data[i] - '0') * k;k *= 10;}sum++;                                                        //追加记录的编号为其最后一条记录的编号加一Switch(bian, sum);}else Switch(bian, 1);                                             //将其编号的值转换成对应字符串fanlen = 0;memset(fabian, '\0', sizeof(fabian));bianlen = strlen(bian);for (i = bianlen - 1; i >= 0; i--)fabian[fanlen++] = bian[i];                                    //因为转换的字符串为改编号的逆序,所以将其反向存储fabian[fanlen] = '\0';strcpy(wj[*len][0].data, fabian);for (i = 1; i < *com; i++) {                                          //分别追加各条记录的值printf("请输入:%s ", wj[0][i].data);scanf("%s", wj[*len][i].data);}*len = *len + 1;printf("该数据添加成功!\n");}void DisplayDbms(char mem[], int* com, int* len) {                          //浏览写进数组中的数据int i, j, k, flen, maxlen = -1;memset(mem, '\0', sizeof(mem));for (i = 0; i < *len; i++)                                                //记录每个字段值中最大的程度以便调整输出的格式for (j = 0; j < *com; j++) {flen = strlen(wj[i][j].data);if (flen > maxlen)maxlen = flen;}for (i = 0; i < *len; i++) {                              //输出wj中所有的字段内容for (k = 0; k < maxlen * (*com); k++)printf("*");                                         //输出*作为顶格printf("\n");for (j = 0; j < *com; j++) {printf("%s", wj[i][j].data);for (k = strlen(wj[i][j].data); k <= maxlen; k++)                  //对齐操作printf(" ");}printf("\n");}for (k = 0; k < maxlen * (*com); k++)printf("*");printf("\n");
}void DispGo(int go, int* com, int* len) {int i, j, k, maxlen = -1, flen;for (i = 0; i < *len; i++) {//记录每个字段值中的最大宽度,以便调整输出的格式  for (j = 0; j < *com; j++) {flen = strlen(wj[i][j].data);if (flen > maxlen)maxlen = flen;}}for (k = 0; k < maxlen * (*com); k++)printf("*");printf("\n");for (i = 0; i < *com; i++) {                    //输出wj的第一行 ,也就是数据库的类型行printf("%s", wj[0][i].data);for (k = strlen(wj[0][i].data); k < maxlen; k++)printf(" ");}printf("\n");for (j = 0; j < *com; j++) {                     //格式化输出go所指的字段值printf("%s", wj[go][j].data);for (k = strlen(wj[go][j].data); k <= maxlen; k++)printf(" ");}printf("\n");for (k = 0; k < maxlen * (*com); k++) {printf("*");}printf("\n");
}void DeleteDbms(char mem[], int* com, int* len) {                  //删除函数char link[110], value[110], zd[110], lx[110];           //接收输入的for命令,value为接收所要删除字段的名称和内容//zd数组为接收要查找的字段,lx为要查找字段的内容int lxlen = 0, vlen, start = -1, end = -1, i, j, flag1 = 0, linklen, jilu = -1, dingwei = -1, zdlen = 0;scanf("%s", link);                           //接收输入的forscanf("%s", value);                          //接收for后面的字符vlen = strlen(value);linklen = strlen(link);link[linklen] = ' ';link[linklen + 1] = '\0';memset(mem, '\0', sizeof(mem));memset(zd, '\0', sizeof(zd));memset(lx, '\0', sizeof(lx));for (i = 0; i < vlen; i++) {          //获取要查找的字段名称if (value[i] == '=')break;zd[zdlen++] = value[i];}zd[zdlen] = '\0';if (strcmp(link, "for ") != 0) {printf("您输入的命令有语法错误!\n");goto loop;}for (i = 0; i < vlen; i++) {if (value[i] == 34 && flag1 == 0) {                 //遇见第一个双引号下标start = i;flag1 = 1;}else if (value[i] == 34 && flag1 == 1) {                        //遇见最后一个双引号end = i;break;}}if (start == -1 || end == -1) {                                           //如果没有遇见一对双引号代表输入的语法有错误printf("您输入的命令语法有错误!\n");goto loop;}for (i = start + 1; i < end; i++) {                                        //把双引号之间的字符存在lx中lx[lxlen++] = value[i];}lx[lxlen] = '\0';for (i = 0; i < *com; i++) {                                                //在wj中匹配zd,如果匹配成功则记录其列坐标if (strcmp(wj[0][i].data, zd) == 0)jilu = i;}if (jilu ==-1) {printf("数据库没有该字段的值!\n");goto loop;}for (i = 0; i < *len; i++) {                                               //如果匹配到该行,则dingwei变量定位到该行if (strcmp(wj[i][jilu].data, lx) == 0) {dingwei = i;break;}}if (dingwei == -1) {printf("数据库中没有符合该条件的字符!\n");goto loop;}for (i = dingwei; i < *len - 1; i++) {                                //删除其匹配成功的字段for (j = 0; j < *com; j++) {strcpy(wj[i][j].data, wj[i + 1][j].data);                       //将所有后面的行向上移动一行,自动覆盖}}*len = *len - 1;printf("删除成功!\n");
loop:;
}void LocateDbms(char link1[],char value1[], char visit[],char lxl[],char zd1[], int *continue1,int *com,int *len,int *fangwen) {int zdlen = 0;int lxlen = 0;int vlen;int falg = 0;char mem[110];int start = -1, end = -1;int i, j, k, flag1 = 0;int maxlen = -1;int linklen;int jilu = -1;int flen;int dingwei = -1;char member[110];fangwen = 1;vlen = strlen(value1);linklen = strlen(link1);    if (continue1 == 0) {link1[linklen] = ' ';link1[linklen + 1] = '\0';}memset(mem, '\0', sizeof(mem));if (continue1 == 0) {memset(zd1, '\0', sizeof(zd1));memset(lxl, '\0', sizeof(lxl));}if (continue1 == 1)                                     //如果输入的是continue命令那么跳转到loop2goto loop2;for (i = 0; i < vlen; i++) {if (value1[i] == '=')break;zd1[zdlen++] = value1[i];}zd1[zdlen] = '\0';
loop2:if (strcmp(link1, "for") != 0 && strcmp(link1, "FOR") != 0) {printf("您输入的命令有语法错误1!\n");goto loop;}for (i = 0; i < vlen; i++) {if (value1[i] == 34 && flag1 == 0) {                 //如果出现第一个引号start = i;flag1 = 1;}else if (value1[i] == 34 && flag1 == 1) {                  //如果出现第二个引号end = i;break;}}if (start == -1 || end == -1) {printf("您输入的命令语法有错误2!\n");goto loop;}for (i = start + 1; i < end; i++) {lxl[lxlen++] = value1[i];}if (continue1 == 1)goto loop3;lxl[lxlen] = '\0';loop3:for (i = 0; i < *com; i++){if (strcmp(wj[0][i].data,zd1)==0)jilu = i;                                                         //找出列}if (jilu == -1) {printf("数据库没有该字段的值!\n");goto loop;}for (i = 0; i < *len; i++) {if (strcmp(wj[i][jilu].data, lxl) == 0 && visit[i] == 0) {dingwei = i;visit[dingwei] = 1;break;}}if (dingwei == -1) {printf("数据库中没有符合该条件的字段!\n");goto loop;}for(i=0;i<*len;i++)for (j = 0; j < *com; j++) {flen = strlen(wj[i][j].data);if (flen > maxlen)maxlen = flen;}for (k = 0; k < maxlen * (*com); k++)printf("*");printf("\n");for (i = 0; i < *com; i++) {printf("%s", wj[0][i].data);for (k = strlen(wj[0][i].data); k <= maxlen; k++)printf(" ");}printf("\n");for (j = 0; j < *com; j++) {printf("%s", wj[dingwei][j].data);for (k = strlen(wj[dingwei][j].data);k <= maxlen; k++)printf(" ");}printf("\n");for (k = 0; k < maxlen * (*com); k++)printf("*");printf("\n");
loop:;
}void ChangeDbms(char mem[], int* com, int* len) {                  //修改字段的函数char link[110], value[110], zd[110], lx[110];int zdlen = 0, lxlen = 0, vlen, start = -1, end = -1, i, flag1 = 0, linklen, jilu = -1, dingwei = -1, gailen;scanf("%s", link);                                              //存放for字符串scanf("%s", value);                                            //存放for后面的字符串vlen = strlen(value);                                         //测量value数组的长度linklen = strlen(link);                                        //测量link数组的长度link[linklen] = ' ';                                           //将link数组末尾追加一个空格以便匹配"for "link[linklen + 1] = '\0';                                               //打上结束标识memset(mem, '\0', sizeof(mem));memset(zd, '\0', sizeof(zd));memset(lx, '\0', sizeof(lx));for (i = 0; i < vlen; i++) {                                          //zd存放value中等号前面的字段名称if (value[i] == '=')break;zd[zdlen++] = value[i];}zd[zdlen] = '\0';if (strcmp(link, "for ") != 0) {    //如果link没有与for匹配成功,则说明命令语法有错误printf("您输入的命令有语法错误!\n");goto loop;}for (i = 0; i < vlen; i++) {if (value[i] == 34 && flag1 == 0) {                 //找到第一个引号start = i;flag1 = 1;}else if (value[i] == 34 && flag1 == 1) {end = i;break;}}if (start == -1 || end == -1){printf("您输入的命令语法有错误!\n");goto loop;}for (i = start + 1; i < end; i++)           //把value数组中start与end之间的字符赋值给lx数组lx[lxlen++] = value[i];lx[lxlen] = '\0';for (i = 0; i < *com; i++)if (strcmp(wj[0][i].data, zd) == 0)              //如果要查找的字段在wj数组中的话,则jilu指向该字段jilu = i;if (jilu == -1) {printf("数据库中没有找到符合该条件的字段!\n");goto loop;}for (i = 0; i < *len; i++) {if (strcmp(wj[i][jilu].data, lx) == 0) {dingwei = i;break;}}if (dingwei == -1) {printf("该数据库没有符合该条件的字段!\n");}for (i = 0; i < *com; i++) {                //找到后对每个字段进行修改printf("请输入%s的值:\n", wj[0][i].data);printf("%s->", wj[dingwei][i].data);scanf("%s", wj[dingwei][i].data);gailen = strlen(wj[dingwei][i].data);wj[dingwei][i].data[gailen] = '\0';}printf("字符段修改成功!\n");
loop:;
}void PxDbms(char ziduan[], char ch, int* com, int* len) {   //排序函数int i, j, k, reg = -1;char temp[20];memset(temp, '\0', sizeof(temp));for (i = 0; i < *com; i++)if (strcmp(wj[0][i].data, ziduan) == 0)reg = i;if (reg == -1)printf("数据库没有该字段!\n");if (reg != -1) {                                //找到就排序if(ch=='d'||ch=='D'){                         //降序排序for (i = 1; i < *len; i++) {              //利用冒泡排序法for (j = i + 1; j < *len; j++) {if (strcmp(wj[i][reg].data, wj[j][reg].data) < 0 || (strlen(wj[i][reg].data) < strlen(wj[j][reg].data))) {for (k = 0; k < *com; k++) {strcpy(temp, wj[i][k].data);strcpy(wj[i][k].data, wj[j][k].data);strcpy(wj[j][k].data, temp);memset(temp, '\0', sizeof(temp));}}}}}else {                                     //升序排序for (i = 1; i < *len; i++) {for (j = i + 1; j < *len; j++) {if (strcmp(wj[i][reg].data, wj[j][reg].data) >0 || (strlen(wj[i][reg].data) > strlen(wj[j][reg].data))) {for (k = 0; k < *com; k++) {strcpy(temp, wj[i][k].data);strcpy(wj[i][k].data, wj[j][k].data);strcpy(wj[j][k].data, temp);memset(temp, '\0', sizeof(temp));}}}}}}
}void SortDbms(int* com, int* len) {char second[110], value[110], ziduan[110], ch ='@ ';int lenv, i, lenzd = 0, com1 = *com, len1 = *len;memset(second, '\0', sizeof(second));memset(value, '\0', sizeof(value));memset(ziduan, '\0', sizeof(ziduan));scanf("%s", second);                          //接收 onscanf("%s", value);                              //接收 on后面的字符if (strcmp(second, "on") != 0) {printf("语法错误!\n");goto loop;}lenv = strlen(value);                 //测量value数组长度for (i = 0; i < lenv; i++) {ziduan[lenzd++] = value[i];if (value[i] == 47) {ch = value[i + 1];                  //ch接收的是排序算法break;}if (value[i] == 92) {printf("您输入的语法中包含非法字符 \ \n");goto loop;}}if (ch == '@ ')ziduan[lenzd] = '\0';elseziduan[lenzd - 1] = '\0';if (ch=='a'||ch=='A'||ch=='d'||ch=='D'||ch=='@ ') {PxDbms(ziduan, ch, &com1, &len1);}elseprintf("语法错误!");
loop:;
}void CloseDbms(char secondinput[], int* com, int* len, char mem[], char bian[]) {      //关闭函数FILE* fp;int i, j;fp = fopen(secondinput, "w+");                         //以读写的方式打开指定的文件for (i = 0; i < *len - 1; i++) {                         //向指定的数据库文件写内容for (j = 0; j < *com; j++)fprintf(fp, "%s ", wj[i][j].data);fputc('\n', fp);}for (i = 0; i < *com; i++)fprintf(fp,"%s ", wj[*len - 1][i].data);fclose(fp);memset(wj, '\0', sizeof(wj));memset(mem, '\0', sizeof(mem));memset(bian, '\0', sizeof(bian));*len = 0;*com = 0;
}int main() {DbmsLinklist* database[1100];                                    //创建数据库结构char input[1100], append[1100];                                   //存放命令字符串int i, l = 0,ll = 0, nu =0, handle,length=1,fangwen=0,visit[110] = { 0 };int continuel = 0;int go;                                                     //当执行go命令时存储当前所指向的记录char error[110];                                            //接收错误命令后面的命令字符串char link1[110];char value1[110];char zdl[110];char lxl[110];char mem[100];                                              //分别存储文件的每一行,再赋值给wjint len=0;                                                      //wj数组的行数,也就是数据库中的记录数目int lie = 0;int com = 0;                                                  //记录wj的列数int bianlen=0, fanlen = 0;char bian[100];                                              //自动生成的编号转换为相应的字符串char fabian[100];                                                //反向存储bian数组FILE* fp;const char secondinput[110];HelpDbms();printf(".");while (scanf("%s", input) != EOF) {                             //连续输入一直到文件尾为止if (strcmp(input, "creat") == 0) {                           //如果输入命令为"creat",则创立数据库scanf("%s",secondinput);                                    //输入数据库名称handle = creat(secondinput, S_IREAD | S_IWRITE);              //创立数据库文件CreateDbmsStruct(database, &length);                                 //调用Createdbmsstruct函数向数据库添加字段for (i = 0; i < length; i++) {write(handle, database[i]->data, strlen(database[i]->data));}printf("\n");goto loop5;}else if (strcmp(input, "quit") == 0)             //退出系统{printf("谢谢使用!\n");break;}else if (strcmp(input, "help") == 0) {HelpDbms();                              //调用help函数显示帮助文档}else if (strcmp(input, "use") == 0) {          //打开数据库命令scanf("%s", secondinput);if ((fp = fopen(secondinput, "r")) == NULL) {//判断数据库在本地磁盘是否存在printf("数据库不存在!\n");printf(".");continue;}else {loop5:printf("数据库已经成功打开!\n");OpenDbms(secondinput, &com, &len, bian, fabian);}printf(".");scanf("%s", append);                               //数据库打开之后输入操作数据库的命令while (1) {if (strcmp(append, "/use") == 0) {    //关闭数据库CloseDbms(secondinput, &com, &len, mem, bian);printf("数据库关闭成功!\n");break;}else if (strcmp(append, "append") == 0)                       //添加内容AppendDbms(bian, fanlen, fabian, bianlen, &com, &len);else if (strcmp(append, "brows") == 0)                            //浏览数据库DisplayDbms(mem, &com, &len);else if (strcmp(append, "go") == 0)                              //执行go命令定位指定行数scanf("%d", &go);else if (strcmp(append, "disp") == 0 || strcmp(append, "DIPS") == 0)     //浏览go命令DispGo(go, &com, &len);                                  //定位行else if (strcmp(append, "delete") == 0 || strcmp(append, "DELETE") == 0)DeleteDbms(mem, &com, &len);                                      //按条件删除数据库所匹配的行else if (strcmp(append, "zap") == 0 || strcmp(append, "ZAP") == 0)     //将数据库内容全部删除,只保留库结构{len = 1;printf("表中记录已经全部删除!\n");}else if (strcmp(append, "locate") == 0 || strcmp(append, "LOCATE") == 0) {          //按条件查找数据库所匹配的行if (continue1 == 0) {                                    //如果输入的是locate命令执行行scanf("%s%s", link1, value1);memset(visit, 0, sizeof(visit));}LocateDbms(link1, value1, visit, lxl, zd1, &continue1, &com, &len, &fangwen);continue1 = 1;}else if (strcmp(append, "contine") == 0 || strcmp(append, "CONTINUE") == 0) {if (fangwen == 0)                          //continue与locate搭配使用,查找符合条件的下一行printf("continue命令必须和locate命令搭配使用!\n");else {continue1 = 1;LocateDbms(link1, value1, visit, lxl, zd1, &continue1, &com, &len, &fangwen);continue1 = 0;}}else if (strcmp(append, "change") == 0 || strcmp(append, "CHANGE")==0)ChangeDbms(mem, &com, &len);                      //修改符合条件的一行else if (strcmp(append, "sort") == 0)SortDbms(&com, &len);                //按条件对数据库的内容进行排序else if (strcmp(append, "help") == 0)HelpDbms();                              //打开帮助文档else if (strcmp(input, "quit") == 0) {     //退出系统printf("谢谢使用!\n");break;}elseprintf("您输入的命令符错误,请重新输入!\n");printf(".");scanf("%s", append);}}else{scanf("%s", error);                        //接收错误命令后面的字符串printf("您输入的命令符错误!请重新输入");}printf("\n");}return 0;
}

头文件

#pragma once
#include<stdio.h>                        //EOF(=^Z或F6),NULL
#include<malloc.h>                       //malloc()等
#include<limits.h>                       //INT_MAX等
#include<string.h>
#include<stdlib.h>                       //atoi()
#include<io.h>                           //eof
#include<math.h>                         //floor(),ceil(),abs()*
#include<process.h>                      //exit()*
/*函数结果状态代码*/
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR -1
#define INFEASIBLE -1




运行完成/use之后,会在源文件路径创建您所建立的数据库,可以找到!

该例子综合利用了线性表和文件的相关知识,实现了FoxBASE数据库的基本功能,可以加深了解数据库的实质,提示编程能力,特别是设计开发较大规模的程序水平,这是一个值得研究的应用实例!

本人在校大学生,菜鸟学习中,欢迎大佬指导,欢迎大家点赞关注!

c语言线性表写的数据库系统(数据结构)相关推荐

  1. c语言线性表顺序存储实验小结,数据结构学习笔记-线性表顺序存储(C语言实现)...

    写了一天,终于将线性表的顺序存储实现了,顺便恶补了一下指针内容.顺序存储,适合做查询,链式存储适合做增删. 添加方法主要就是将线性表从后往前遍历,依次往后挪一位,直到空出想要插入的位置,删除方法就是将 ...

  2. c语言线性表库函数大全,数据结构(C语言版)-线性表习题详解

    <数据结构(C语言版)-线性表习题详解>由会员分享,可在线阅读,更多相关<数据结构(C语言版)-线性表习题详解(23页珍藏版)>请在人人文库网上搜索. 1.数 据 结 构 ,线 ...

  3. 用c语言线性表的链式表示实现,数据结构-使用C语言 朱战立第2章线性表的链式表示.ppt...

    数据结构-使用C语言 朱战立第2章线性表的链式表示 * 循环链表(circular linked list) 循环链表是表中最后一个结点的指针指向头结点,使链表构成环状 特点:从表中任一结点出发均可找 ...

  4. c语言数据结构线性表LA和LB,数据结构(C语言版)设有线性表LA(3,5,8,110)和LB(2,6,8,9,11,15,20)求新集合?...

    数据结构(C语言版)设有线性表LA(3,5,8,110)和LB(2,6,8,9,11,15,20)求新集合? 数据结构(C语言版)设有线性表LA(3,5,8,110)和LB(2,6,8,9,11,15 ...

  5. C语言数据结构线性表上机实验报告,数据结构实验报告实验一线性表_图文

    数据结构实验报告实验一线性表_图文 更新时间:2017/2/11 1:23:00  浏览量:763  手机版 数据结构实验报告 实验名称: 实验一 线性表 学生姓名: 班 级: 班内序号: 学 号: ...

  6. c语言线性表的逆转,数据结构(C语言)设有一个线性表E,将线性表逆置,要求逆线性表占? 爱问知识人...

    输入数据,输出数据,及线性表的长度, 询问是否查找数据,若查找则由用户输入需查找的数据,显示此数据在线性表中的位置(第几个) */ #include #include #define NULL 0 # ...

  7. c语言线性表拷贝,数据结构(C语言版)---线性表顺序存储表示

    1.顺序表:线性表的顺序存储,用一组地址连续的存储单元存储线性表中的数据元素. 1) 特点:随机访问,即通过首地址和元素序号可在时间O(1)内找到指定元素. 表中元素的逻辑顺序与其物理顺序相同,线性表 ...

  8. C语言——线性表 (数据结构)

    对线性表操作的主体功能实现 #include<stdio.h> #include<malloc.h> #include<stdlib.h>//函数返回状态代码 #d ...

  9. python线性表顺序存储实现_数据结构——基于C的线性表的顺序存储结构的基本操作的实现...

    /*** *SeqList.c *Copyright (c) 2015, XZG. All rights reserved. *Purpose: * 线性表顺序存储结构的创建.数据插入.数据获取.获取 ...

最新文章

  1. linux下SublimeText的中文输入法问题之解决方案
  2. 【大白话系列】深入浅出Cleaner+虚引用完成堆外内存的回收
  3. 指定应用程序网络连接_总结Java开发Web应用程序应该理解的几个知识点
  4. C/C++字符串使用整理
  5. 直播安装vnc连接树莓
  6. “秃如其来”的90后,造就了一个蒸蒸日上的产业
  7. python求解典型相关系数_三大相关系数: pearson, spearman, kendall(python示例实现)...
  8. 常见微型计算机外部输入设备,微型计算机常用外部设备
  9. Undefined variable 'raw_input'pylint(undefined-variable)
  10. 教师资格证上传照片时显示“内部服务器错误”解决方法(亲测有效)
  11. 零售行业新渠道,效率居然这么高?
  12. 考研丨7-12月复习安排时间表
  13. STM32F407VET6 / BLACK_F407VE开发板间隔0.5秒不断重启
  14. 上传ipa到appstore最简洁的方法
  15. java 手机号验证_java最新手机号码正则验证方法
  16. ip地址位置提供商查询 cip.cc/ip
  17. OpenAcc的使用
  18. 如何利用百度经验引流?百度经验精准引流的方法
  19. SQL 招聘网站岗位数据分析
  20. 终于买了我心爱的IBM T43了。

热门文章

  1. 爬虫selenium + chrome (PhantomJS)模拟浏览器 抓取京东商城为例
  2. 自定义模块:根据光导的导光条件计算光栅周期
  3. Lucene高亮显示详解
  4. 机器学习之L1、L2的区别与相关数学基础知识
  5. CAD2019中文版下载AutoCAD2019安装教程
  6. linux下electron任务栏图标处理
  7. css 超链接样式设置
  8. QQmail安装例子
  9. 外贸怎么在谷歌搜索客户?
  10. 思迈特Smartbi数据填报功能