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
- C语言的顺序表访问小代码
- C语言实现顺序表的所有操作代码
- 顺序表C语言代码实现
- 【顺序表】 c语言的顺序表
- C语言中include引用顺序的小常识
- 代码块的访问顺序
- SqListFunc顺序链表的12个基本操作的C语言代码(数据结构)
- 线性表的顺序存储结构的常见操作(C语言代码实现)
- 【C语言】顺序表
- 顺序表 - C语言
- C语言:顺序表
- C语言顺序表
- C语言顺序表
- 20151202 c语言小代码
- C语言访问MYSQL数据库的完整的代码例子
- C语言访问MYSQL数据库的完整的代码例子
- 线性表的顺序实现(C语言)
- 顺序表的C语言实现
- 连载一 那些在无限互联的日子
- 在无线互联的这些事连载二
- URAL 1715. Another Ball Killer (大模拟)
- u32、u16、u8 数据类型
- 大型网络游戏服务器的框架设计
- C语言的顺序表访问小代码
- 黑科技(next_permutation和prev_permutation)
- HBase的compact分析
- E 接口
- 大型网站架构演化
- Asp.net数据库链接
- linux权限控制机制
- PAT (Advanced Level) 1075. PAT Judge (25) PAT排名 结构体排序
- 磁盘IO的几种工作机制