c语言线性表写的数据库系统(数据结构)
数据库系统
用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语言线性表写的数据库系统(数据结构)相关推荐
- c语言线性表顺序存储实验小结,数据结构学习笔记-线性表顺序存储(C语言实现)...
写了一天,终于将线性表的顺序存储实现了,顺便恶补了一下指针内容.顺序存储,适合做查询,链式存储适合做增删. 添加方法主要就是将线性表从后往前遍历,依次往后挪一位,直到空出想要插入的位置,删除方法就是将 ...
- c语言线性表库函数大全,数据结构(C语言版)-线性表习题详解
<数据结构(C语言版)-线性表习题详解>由会员分享,可在线阅读,更多相关<数据结构(C语言版)-线性表习题详解(23页珍藏版)>请在人人文库网上搜索. 1.数 据 结 构 ,线 ...
- 用c语言线性表的链式表示实现,数据结构-使用C语言 朱战立第2章线性表的链式表示.ppt...
数据结构-使用C语言 朱战立第2章线性表的链式表示 * 循环链表(circular linked list) 循环链表是表中最后一个结点的指针指向头结点,使链表构成环状 特点:从表中任一结点出发均可找 ...
- 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 ...
- C语言数据结构线性表上机实验报告,数据结构实验报告实验一线性表_图文
数据结构实验报告实验一线性表_图文 更新时间:2017/2/11 1:23:00 浏览量:763 手机版 数据结构实验报告 实验名称: 实验一 线性表 学生姓名: 班 级: 班内序号: 学 号: ...
- c语言线性表的逆转,数据结构(C语言)设有一个线性表E,将线性表逆置,要求逆线性表占? 爱问知识人...
输入数据,输出数据,及线性表的长度, 询问是否查找数据,若查找则由用户输入需查找的数据,显示此数据在线性表中的位置(第几个) */ #include #include #define NULL 0 # ...
- c语言线性表拷贝,数据结构(C语言版)---线性表顺序存储表示
1.顺序表:线性表的顺序存储,用一组地址连续的存储单元存储线性表中的数据元素. 1) 特点:随机访问,即通过首地址和元素序号可在时间O(1)内找到指定元素. 表中元素的逻辑顺序与其物理顺序相同,线性表 ...
- C语言——线性表 (数据结构)
对线性表操作的主体功能实现 #include<stdio.h> #include<malloc.h> #include<stdlib.h>//函数返回状态代码 #d ...
- python线性表顺序存储实现_数据结构——基于C的线性表的顺序存储结构的基本操作的实现...
/*** *SeqList.c *Copyright (c) 2015, XZG. All rights reserved. *Purpose: * 线性表顺序存储结构的创建.数据插入.数据获取.获取 ...
最新文章
- linux下SublimeText的中文输入法问题之解决方案
- 【大白话系列】深入浅出Cleaner+虚引用完成堆外内存的回收
- 指定应用程序网络连接_总结Java开发Web应用程序应该理解的几个知识点
- C/C++字符串使用整理
- 直播安装vnc连接树莓
- “秃如其来”的90后,造就了一个蒸蒸日上的产业
- python求解典型相关系数_三大相关系数: pearson, spearman, kendall(python示例实现)...
- 常见微型计算机外部输入设备,微型计算机常用外部设备
- Undefined variable 'raw_input'pylint(undefined-variable)
- 教师资格证上传照片时显示“内部服务器错误”解决方法(亲测有效)
- 零售行业新渠道,效率居然这么高?
- 考研丨7-12月复习安排时间表
- STM32F407VET6 / BLACK_F407VE开发板间隔0.5秒不断重启
- 上传ipa到appstore最简洁的方法
- java 手机号验证_java最新手机号码正则验证方法
- ip地址位置提供商查询 cip.cc/ip
- OpenAcc的使用
- 如何利用百度经验引流?百度经验精准引流的方法
- SQL 招聘网站岗位数据分析
- 终于买了我心爱的IBM T43了。