数据结构之链表实现简单的信息系统
2014-03-24 16:05
369 查看
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
相比于线性表顺序结构,操作复杂。
线性表的链式存储表示的特点是用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。因此,为了表示每个数据元素
与其直接后继数据元素 之间的逻辑关系,对数据元素 来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置)。
/*题目:学生信息管理系统功能:增加学生信息、删除全部学生信息、删除某1个学生信息、根据姓名查找学生信息并打印、打印所有学生信息 学生信息包含:学号、姓名、住址、数学成绩、计算机成绩*/
相比于线性表顺序结构,操作复杂。
线性表的链式存储表示的特点是用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。因此,为了表示每个数据元素
与其直接后继数据元素 之间的逻辑关系,对数据元素 来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置)。
/*题目:学生信息管理系统功能:增加学生信息、删除全部学生信息、删除某1个学生信息、根据姓名查找学生信息并打印、打印所有学生信息 学生信息包含:学号、姓名、住址、数学成绩、计算机成绩*/
#include<stdio.h> #include<malloc.h> #include<stdlib.h> #include<string.h> #define man 5
typedef struct link { int num; char *name; char *addr; double math; double computer; struct link *next; }program; void modify_student(program *); program *create_link() { program *header; header=NULL; return header; } void add_no(program **head,int num,char *name,char *address,double computer,double math) { program *q=(program *)malloc(sizeof(program)); program *p2; int i=0; if(q==NULL) { printf("内存空间不足~\n"); exit(0); } q->num=num; q->math=math; q->computer=computer; q->name=(char *)malloc(strlen(name)+1); strcpy(q->name,name); q->addr=(char *)malloc(strlen(address)+1); strcpy(q->addr,address); q->next=NULL; if(*head==NULL) { *head=q; } else { p2=*head; while(p2->next!=NULL) { p2=p2->next; } p2->next=q; } return; } void link_node(program *head) { program *g=(program *)malloc(sizeof(program)); g=head; int h=0; if(g==NULL) printf("error\n"); while(g!=NULL) { h++; g=g->next; } printf("%d\n",h); //return h; } void destory_link(program **head) { program *h;//=(program *)malloc(sizeof(program)); h=*head; program *h1; int j; while(h!=NULL) { *head=h->next; free(h); h=NULL; h=*head; } printf("\n释放内存!\n"); } void p_link(program *header) { program *p; p=header; if(p==NULL) { return; } else { while(p!=NULL) { printf("%d %s %s %.2f %.2f ",p->num,p->name,p->addr,p->math,p->computer); p=p->next; } } printf("\n"); } void delete_node(program **head,int num) { program *h=*head; program *p; if(*head==NULL) { printf("学生信息空"); } while(h!=NULL) { if(h->num==num) { *head=h->next; free(h); h=NULL; h=*head; break; } } return ; } void one_student(program *head,char *name) { program *p; p=head; if(p==NULL) { printf("内存不足!"); return ; } if(p!=NULL) { while(p!=NULL) { if(strcmp(p->name,name)==0) { printf("%d %s %lf %lf",p->num,p->addr,p->math,p->computer); } p=p->next; } } printf("\n"); } void modify_student(program *head) { program *h; h=head; while(h!=NULL) { if(h->num==101) { h->name="陈峰"; break; } else { h=h->next; } } } int main() { int m,i=0,j=0; int n; char ch; char *student_name[4]={"张三","lisi","wangwu","sunhai"}; int student_num=101;//{101,102,103,104}; char *student_addr[4]={"China","America","England","Frence"}; double student_computer=56.3;//{53.5,64.8,95.6,75.0}; double student_math=85.3;//{65.2,78.0,90.5,88.7}; int number=101; int number1=102; int number2=103; char *name="张三"; char *name1="李四"; char *name2="王五"; char *address="中国"; char *address1="美国"; char *address2="法国"; double math=65.0; double math1=95.1; double math2=68.5; double computer=85.3; double computer1=75.5; double computer2=85.0; program *header=create_link(); program *pp; pp=header; while(1) { printf("学生信息系统相关功能如下:\n"); printf("(1)增加学生信息。\n"); printf("(2)删除个别学生信息。\n"); printf("(3)删除所有的学生信息.\n"); printf("(4)查询学生人数。\n"); printf("(5)查找个别人信息。\n"); printf("(6)打印所有学生的信息。\n"); printf("(7)退出!\n"); ch=getchar(); switch(ch) { case '1': { printf("增加学生信息。\n"); add_no(&pp,number,name,address,computer,math); add_no(&pp,number1,name1,address1,computer1,math1); add_no(&pp,number2,name2,address2,computer2,math2); break; } case '2': { printf("将要删除指定学生信息.\n"); delete_node(&pp,number); break; } case '3': { printf("将要删除所有人的信息。\n"); destory_link(&pp); p_link(pp); break; } case '4': { printf("查询学生人数.\n"); link_node(pp); break; } case '5': { printf("查询个别人信息。\n"); one_student(pp,"张三"); break; } case '6': { printf("查询所有学生信息。\n"); p_link(pp); break; } case '7': { printf("系统退出!\n"); exit(1); break; } case '8': { printf("修改名字.\n"); modify_student(pp); break; } } fflush(stdin); } }
相关文章推荐
- 数据结构 学习笔记之:静态链表--史上最简单的C语言实现——只为掌握概念——不清楚静态链表的鸟鸟们有福了!
- 算法与数据结构基础7:C++双链表的简单实现
- 数据结构作业 ------ 用链表实现简单多项式加法
- redis 源代码之数据结构(sds,链表的实现)
- [数据结构]顺序表的C语言简单实现
- 数据结构(6)——栈的链表实现
- 数据结构(13)二叉树的动态链表存储和遍历的实现
- 数据结构之链表:实现单链表的逆序 (1)
- 数据结构基础(10) --单链表迭代器的设计与实现
- 简单数据结构实现——二叉查找树
- 数据结构(Data structure):用链表实现多项式的表示和运算(C语言)
- 状态管理对象器的实现,数据结构为链表
- 数据结构之栈的链表实现
- 数据结构之stack,queue的数组与链表实现
- 数据结构之单向链表(java实现)
- 算法:一元多项式的表示及相加(链表实现)-数据结构(4)
- 经典数据结构之队列的链表实现方法
- 程序员面试宝典之数据结构基础---⑤单链表逆序的递归与非递归实现
- 数据结构算法代码实现——线性表的链式表示与实现(单链表)(三 )
- Java实现一个简单的链表结构------LinkedList