用单向链表输入数据,逆序显示出
2017-11-23 21:32
423 查看
#include <stdio.h> #include <stdlib.h> #include <stdbool.h> typedef int datatype; typedef struct linklist { datatype data; struct linklist * next; }link_list,*link_plist; void linklist_init(link_plist *H); void linklist_insert(link_plist p,link_plist new); bool linklist_del(link_plist p); bool is_empty_linklist(link_plist p); void linklist_show(link_plist h); void linklist_create(link_plist h); void linklist_sort(link_plist h); int main(void) { link_plist h; linklist_init(&h); linklist_create(h); linklist_sort(h); return 0; } //初始化,传入指针的指针 void linklist_init(link_plist *H) { *H = (link_plist)malloc(sizeof(link_list)); if(*H == NULL) { perror("malloc failed"); exit(1); } (*H)->next = NULL;//把头结点的next指针赋值为NULL } //插入 void linklist_insert(link_plist p,link_plist new) { new->next = p->next; p->next = new; } //删除p后面的一个节点 bool linklist_del(link_plist p) { link_plist t; if(p->next == NULL) { printf("删除失败,表已空\n"); return false; } //记住p后面的第一个结点 t = p->next; //p结点指向t的下一个 p->next = t->next; //释放t结点,t结点被删除 free(t); return true; } //判断空 bool is_empty_linklist(link_plist p) { if(p->next == NULL) return true; else return false; } //遍历(厉害啊) void linklist_show(link_plist h) { link_plist t; printf("|_|"); for(t=h->next;t!=NULL;t=t->next)//移动t printf("---->%d",t->data); printf("\n"); } //创建一个表 void linklist_create(link_plist h) { int n,i; link_plist new,p=h; printf("你要创建几个数据的表:"); scanf("%d",&n); for(i=0;i<n;i++) { new = (link_plist)malloc(sizeof(link_list));//用malloc动态分配内存 //malloc之后一般要判断是否申请成功 if(NULL == new) { perror("malloc failed");//用perror exit(1); } printf("请输入一个数据:"); scanf("%d",&new->data); //插入 new->next = p->next; p->next = new; // linklist_insert(p,new); p = p->next;//让p始终指向表尾 linklist_show(h); } } //倒序 void linklist_sort(link_plist h) { //将原链表拆分成两个表:一个空表,一个数据表 link_plist p,t; p=h->next;//数据表 h->next=NULL;//空表 while(p != NULL) { t = p; p = p->next; linklist_insert(h,t); linklist_show(h); } }
/*编译过程
$ ./a.out
你要创建几个数据的表:5
请输入一个数据:1
|_|—->1
请输入一个数据:2
|_|—->1—->2
请输入一个数据:3
|_|—->1—->2—->3
请输入一个数据:4
|_|—->1—->2—->3—->4
请输入一个数据:5
|_|—->1—->2—->3—->4—->5
|_|—->1
|_|—->2—->1
|_|—->3—->2—->1
|_|—->4—->3—->2—->1
|_|—->5—->4—->3—->2—->1
*/
相关文章推荐
- 基于链表:键盘输入若干个整数,按输入数据逆序建立一个带头结点的单链表
- 华为机试题(8)--单向链表的建立,反转(逆序),遍历显示,删除
- 数据结构——算法之(004)(输入一个单向链表,输出该链表中倒数第k个结点)
- 单向链表(四) 修改指定节点的数据值、逆序输出
- 数据结构实验之链表二:逆序建立链表
- 数据结构作业代码保存-2.1 单向循环链表的建立,插入和删除,和指针移动
- P279_1014 按照输入时逆序,只要用指针做交换即可。若大数据不便于移动,输入时建标识表排序之
- 字节按位逆序以及单向链表逆序
- 实现了起起重合,起止重合,止止重合,止起重合判断的双向链表数据结构(对无序数据输入的处理)
- 单向链表逆序 图解
- 2117数据结构实验之链表二:逆序建立链表
- 单链表的头插、中插、尾插、删除、逆序、显示(C语言实现)
- 《C算法》读书笔记(5):单向链表逆序
- 汇编——逆序显示输入的字符串
- 数据结构实验之链表二:逆序建立链表
- 数据结构实验之链表二:逆序建立链表
- 输入一个单向链表,输出该链表中倒数第K个结点
- 【练习】输入一个单向链表,输出该链表中倒数第k 个结点
- Dreamweaver 8 配置站點時无法使用您输入的前缀显示活动数据请查站点配置(http,錯誤401)
- 第4章 处理用户输入与显示数据------------(标准文件描述符、STDIN/STDERR/STDOUT、临时重定向、永久重定向exec)