【数据结构】单链表学习笔记
2013-04-19 17:59
375 查看
开发环境:
操作系统:Ubuntu
编辑器:vim
编译器:gcc
调试器:gdb
代码如下:
测试:
1、建立成绩单链表(0 0结束输入),并打印:
2、插入学号4的数据,并打印:
3、删除学号4的数据,并打印:
程序基本实现功能。
操作系统:Ubuntu
编辑器:vim
编译器:gcc
调试器:gdb
代码如下:
#include<stdio.h> #include<malloc.h> typedef struct studentT { int num; float score; struct studentT *next; }student; /*函数名:create*/ /*功能:返回指向链表头节点的指针*/ /*输入:无*/ /*输出:无*/ student *create() { student *head; student *p,*tail; /* float temp;*/ head=NULL; do { p=(student *)malloc(sizeof(student)); scanf("%d %f",&p->num,&p->score); if(p->num==0) { free(p); break; }/*非法数据删除地址空间*/ /* p->score=temp;*/ p->next=NULL; if(head==NULL) {head=p;tail=p;}/*第一个数据插入表头*/ else {tail->next=p;tail=p;}/*新结点插入表尾*/ }while(p->num!=0); return head; } /*函数名:display*/ /*功能:打印链表中所有的元素*/ /*输入:无*/ /*输出:链表中所有的数据*/ void display(student *head) { student *p; p=head; while(p!=NULL) { printf("%4d %5.1f",p->num,p->score); p=p->next; }/*数据链表实现遍历*/ printf("\n"); } /*函数名:insert*/ /*功能:按学号顺序插入数据*/ /*输入:无*/ /*输出:无*/ student *insert(student *head,student *new) { student *p,*q; if(head==NULL) head=new; else { if(head->num>=new->num) { new->next=head; head=new; }/*学号小的放在链首*/ else { p=head; while(p->num<new->num&&p->next!=NULL) { q=p; p=p->next; }/*循环直到待插入结点的学号小于前一结点的学号*/ if(p->num>new->num) { q->next=new; new->next=p; } else { p->next=new; new->next=NULL; }/*该结点插入到链表的尾部*/ } } return head; } /*函数名:delete*/ /*功能:删除指定学号的数据*/ /*输入:无*/ /*输出:无*/ student *delete(student *head,int num) { student *p1,*p2; if(head==NULL) printf("ERROR\n"); else { p1=head; while(num!=p1->num&&p1->next!=NULL) { p2=p1; p1=p1->next; }/*查找学号为num的结点*/ if(num==p1->num) { if(p1==head) head=p1->next;/*删除头结点*/ else p2->next=p1->next;/*下一结点的地址赋值给前一结点的指针域*/ free(p1);/*释放内存空间*/ } else printf("ERROR\n"); } return head; } /*函数名:main*/ /*功能:建立学生成绩单链表,实现对记录的遍历、插入、插入*/ /*输入:无*/ /*输出:打印成绩单链表*/ int main() { student *l,*temp; int temp1=0; l=create();/*建立成绩单链表*/ display(l);/*遍历单链表*/ temp=(student *)malloc(sizeof(student)); scanf("%d %f",&temp->num,&temp->score); temp->next=NULL; l=insert(l,temp);/*插入一个结点*/ display(l);/*打印单链表*/ scanf("%d",&temp1);/*读入要删除的学号*/ delete(l,temp1); display(l);/*打印删除结点后的单链表*/ return 1; }
测试:
1、建立成绩单链表(0 0结束输入),并打印:
2、插入学号4的数据,并打印:
3、删除学号4的数据,并打印:
程序基本实现功能。
相关文章推荐
- 【算法学习笔记】07.数据结构基础 链表 初步练习
- 【算法学习笔记】07.数据结构基础 链表 初步练习
- 数据结构之链表学习笔记
- 数据结构之链表学习笔记
- 数据结构与算法学习笔记之写链表代码的正确姿势(下)
- 数据结构与算法学习笔记之写链表代码的正确姿势(下)
- 学习笔记:数据结构(三)内核链表
- 【学习笔记】数据结构与算法基础学习:链表
- 数据结构——链表学习笔记
- 数据结构 学习笔记之:静态链表--史上最简单的C语言实现——只为掌握概念——不清楚静态链表的鸟鸟们有福了!
- 数据结构与算法学习笔记——链表部分实现(数组形式)
- 数据结构学习笔记——其它链表
- 【学习笔记----数据结构04-单循环链表】
- [原创]数据结构学习笔记之一:链表
- 慕课网学习笔记之数据结构一单链表(C++)
- 【数据结构与算法学习笔记】PART3 线性结构(除向量外,数组、栈、队列、链表)
- 【学习笔记----数据结构09-树】
- python 学习笔记 3 -- 数据结构篇
- IOS开发学习笔记007-数据结构
- 【学习点滴-数据结构-单链表】交换单链表中任意两个元素