C语言的顺序表访问小代码

来源:互联网 发布:南京行知实验幼儿园 编辑:程序博客网 时间:2024/04/30 02:12

逛游论坛,看个帖子,手痒痒,照着写点代码。


帖子:

http://bbs.csdn.net/topics/391091587


功能变更如下:

  • 每次输入一组数据:name, id, location/inde
  • 输入过程中,如果直接回车,则表示结束输入
  • 当输入最大门限(示例代码为10),则程序自动结束输入。


特别提及:

代码中pnode同时为数据类型的名称和变量的名称,这在C语法上是合法的,但实际上从可读性来讲,可能并不推荐。不过在Linux的诸多代码中,这种风格倒是比较常见。


代码如下:

/*see: http://bbs.csdn.net/topics/391091587*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <assert.h>struct node{    int max_count;    int current_count;    int id[100];    char *name[100];};typedef struct node *pnode;//创建一个空的顺序表,最大值为m。n为0pnode create(int max_count){    pnode node = (pnode)malloc(sizeof(struct node));    if (NULL == node) {        printf("failed to create!");        return NULL;    }        node->max_count = max_count;    node->current_count = 0;    printf("success to create\n");        return node;}//查询一个表是否为空表int is_empty(pnode pnode){    if (pnode->current_count == 0) {        //printf("empty\n");        return 1;    }    //printf("not empty\n");    return 0;}//插入一个信息到顺序表,插入到第index个元素之前void insert(pnode pnode, int index, int id, char name[10]){    if (index < 0 || index > pnode->current_count) index = pnode->current_count;        for(int q = pnode->current_count - 1; q >= index; q--) {        pnode->id[q + 1] = pnode->id[q];        pnode->name[q + 1] = pnode->name[q];    }        pnode->current_count++;    pnode->id[index] = id;    //pnode->name[index] = strdup(name); #MinGW's error    pnode->name[index] = (char*)malloc(sizeof(char) * sizeof(strlen(name) + 1));    if (NULL == pnode->name[index]) {        printf("malloc failed.\n");    } else {        strcpy(pnode->name[index], name);    }        //return pnode;}int visit(pnode pnode){    int i;        if (is_empty(pnode)) return 0;        for (i = 0; i < pnode->current_count; i++) {        printf("%d:[%d, %s] ", i, pnode->id[i], pnode->name[i]);    }        printf("\n");}void delete(pnode pnode){    int i;    for (i = 0; i < pnode->current_count; i++) {        free(pnode->name[i]);        pnode->name[i] = NULL;    }        pnode->current_count = 0;}static void test1(){       pnode pnode;    char buffer[1024]; // Assume the input string will not exceed 1024.    char name[1024];    int loc = -1;    int id = -1;    int max_count = 10;    int current_count = 0;    pnode = create(max_count);        if (NULL == pnode) return;        while(1) {        printf("Please enter: [name, id, index]. Enter directly to exit.\n");                int index = 0;        for (; (buffer[index] = getchar()) != '\n' && index < 1024; index++) {            //printf("index=%d, buffer[%d]=0x%02x\n", index, index, buffer[index]);        }                //printf("index=%d\n", index);                if (index == 0) {            break;        }                //printf("User's input: %s\n", buffer);                if (3 != sscanf(buffer, "%s %d %d", &name, &id, &loc)) {            printf("Error input. The input should be, e.g., \"John 35 0\"\n");            continue;        }                insert(pnode, loc, id, name);                visit(pnode);                current_count++;        if (current_count == max_count) {            printf("Now is the max count! Stop automatically!\n");            break;        }    }        delete(pnode);}int main(){    test1();        return 0;}

编译&链接:

D:\examples\cpp\sequence_list>gcc -std=c99 sequenc_list.cD:\examples\cpp\sequence_list>


运行效果:

1. 直接回车,程序退出:

D:\examples\cpp\sequence_list>a.exesuccess to createPlease enter: [name, id, index]. Enter directly to exit.D:\examples\cpp\sequence_list>

2. 输入几组数据之后,直接回车退出:

D:\examples\cpp\sequence_list>a.exesuccess to createPlease enter: [name, id, index]. Enter directly to exit.one 1 10:[1, one]Please enter: [name, id, index]. Enter directly to exit.two 2 00:[2, two] 1:[1, one]Please enter: [name, id, index]. Enter directly to exit.three 3 10:[2, two] 1:[3, three] 2:[1, one]Please enter: [name, id, index]. Enter directly to exit.four 4 40:[2, two] 1:[3, three] 2:[1, one] 3:[4, four]Please enter: [name, id, index]. Enter directly to exit.D:\examples\cpp\sequence_list>

3. 输入最大门限10组数据之后,程序自动退出:

D:\examples\cpp\sequence_list>a.exesuccess to createPlease enter: [name, id, index]. Enter directly to exit.one 1 10:[1, one]Please enter: [name, id, index]. Enter directly to exit.two 2 20:[1, one] 1:[2, two]Please enter: [name, id, index]. Enter directly to exit.three 3 30:[1, one] 1:[2, two] 2:[3, three]Please enter: [name, id, index]. Enter directly to exit.four 4 40:[1, one] 1:[2, two] 2:[3, three] 3:[4, four]Please enter: [name, id, index]. Enter directly to exit.five 5 50:[1, one] 1:[2, two] 2:[3, three] 3:[4, four] 4:[5, five]Please enter: [name, id, index]. Enter directly to exit.six 6 60:[1, one] 1:[2, two] 2:[3, three] 3:[4, four] 4:[5, five] 5:[6, six]Please enter: [name, id, index]. Enter directly to exit.seven 7 70:[1, one] 1:[2, two] 2:[3, three] 3:[4, four] 4:[5, five] 5:[6, six] 6:[7, seven]Please enter: [name, id, index]. Enter directly to exit.eight 8 80:[1, one] 1:[2, two] 2:[3, three] 3:[4, four] 4:[5, five] 5:[6, six] 6:[7, seven] 7:[8, eight]Please enter: [name, id, index]. Enter directly to exit.nine 9 90:[1, one] 1:[2, two] 2:[3, three] 3:[4, four] 4:[5, five] 5:[6, six] 6:[7, seven] 7:[8, eight] 8:[9, nine]Please enter: [name, id, index]. Enter directly to exit.ten 10 100:[1, one] 1:[2, two] 2:[3, three] 3:[4, four] 4:[5, five] 5:[6, six] 6:[7, seven] 7:[8, eight] 8:[9, nine] 9:[10, ten]Now is the max count! Stop automatically!D:\examples\cpp\sequence_list>





0 0
原创粉丝点击