题目链接 : https://vjudge.net/problem/Aizu-ALDS1_3_C

注 :双向链表

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4 struct Node{
 5     int key;
 6     struct Node *prior,*next;
 7 };
 8
 9 Node *nil; //创建头节点
10
11 Node* list_search(int key) {          //搜索链返回值为节点地址
12     Node *cur = nil -> next;
13     while(cur -> key != key && cur != nil) {      //当key值与链中某节点key相同或到达nil停止
14         cur = cur -> next;
15     }
16     return cur;
17 }
18
19 void init() {                              //初始化头节点
20     nil = (Node *)malloc(sizeof(Node));    //定义一个指针不为其分配内存,需要动态分配内存
21     nil -> next = nil;
22     nil -> prior = nil;
23 }
24
25 void print_list() {                        //打印链表
26     Node *cur = nil -> next;            //从首节点开始打印
27     int isf = 0;                        //判断空格输出
28     while(1) {
29         if(cur == nil) break;
30         if(isf++ > 0) printf(" ");
31         printf("%d",cur ->key);
32         cur = cur -> next;
33     }
34     printf("\n");
35 }
36 void delete_node(Node *t) {
37     if (t == nil) return; //t为头节点不做处理
38     t -> prior -> next = t -> next;
39     t -> next -> prior = t -> prior;
40     free(t);                      //删除后释放空间
41 }
42
43 void delete_frist() {
44     delete_node(nil -> next);
45 }
46
47 void delete_last() {
48     delete_node(nil -> prior);
49 }
50
51 void insert(int key) {                     //理解插入方式
52     Node *x = (Node*)malloc(sizeof(Node));
53     x -> key = key;
54     x -> next = nil -> next;
55     nil -> next -> prior = x;
56     nil -> next = x;
57     x -> prior = nil;
58 }
59
60 void delete_key(int key) {
61     delete_node(list_search(key));
62 }
63 int main()
64 {
65     int key, n, i;
66     int size = 0;
67     char com[20];
68     int np = 0,nd = 0;
69     scanf("%d",&n);
70     init();
71     for (i = 0;i < n;i++ ) {
72         scanf("%s%d",com,&key);
73         if (com[0] == 'i') { insert(key);np++;size++; }
74         else if(com[0] == 'd') {
75             if (strlen(com) > 6){
76                 if( com[6] == 'F' ) delete_frist();
77                 else if( com[6] == 'L') delete_last();
78                 }
79             else{
80                 delete_key(key); nd++;
81             }
82             size--;
83             }
84         }
85
86
87     print_list() ;
88
89     return 0;
90  } 

转载于:https://www.cnblogs.com/Dicer/p/8509791.html

Doubly Linked List,( Aizu - ALDS1_3C )相关推荐

  1. C++Doubly Linked List双向链表(附完整源码)

    C++AVL树自平衡二叉查找树 node结构体定义 实现了以下几个接口 Doubly Linked List双向链表算法的完整源码(定义,实现,main函数测试) node结构体定义 struct n ...

  2. C语言实现双向链表Doubly Linked List(附完整源码)

    双向链表Doubly Linked List list结构体 实现以下6个接口 双向链表Doubly Linked List完整源码(定义,实现,main函数测试) list结构体 typedef s ...

  3. 双向链表(Doubly Linked List)

    双向链表(Doubly Linked List) 1. 双向链表的概念 1.1 双向链表的定义 双向链表又称为双链表,是链表的一种. 1.2 双向链表的结点结构 双向链表的结点包括三个部分:前驱指针域 ...

  4. 1052 Linked List Sorting(排序)

    1052 Linked List Sorting(排序) 思路: s t r u c t + struct+ struct+排序. 坑点: 1.答案只包含从原链表中头结点开始的结点,有点结点不在原链表 ...

  5. LeetCode 426. Convert Binary Search Tree to Sorted Doubly Linked List--转换二叉树为双向链表--Java,C++,Python解法

    题目地址:Convert Binary Search Tree to Sorted Doubly Linked List - LeetCode Convert a BST to a sorted ci ...

  6. python小练习--模拟用户登录,(3次重试机会,登录成功展示登录账号密码)

    知识点使用:1.格式化输出的两种方法---% .formate 2.while循环的使用,及跳出循环的两种方法---break(跳出循环体).continue(结束本次循环,继续下次循环) 3.if条 ...

  7. LeetCode 430. Flatten a Multilevel Doubly Linked List

    原题链接在这里:https://leetcode.com/problems/flatten-a-multilevel-doubly-linked-list/description/ 题目: You a ...

  8. 【解答】一个电动模型,每一组电池能让其行驶8分钟,一个充电器能同时给两组电池充电,一组充满需要15分钟,至少准备(?)组电池,(?)个充电器,可以让模型每次行驶完可以立即换电池行驶不用等待。

    阿里2015年实习生题目: 一个电动模型,每一组电池能让其行驶8分钟,一个充电器能同时给两组电池充电,一组充满需要15分钟,至少准备(?)组电池,(?)个充电器,可以让模型每次行驶完可以立即换电池行驶 ...

  9. webpack 4.14.0 版本太高,无法执行相关指令,(将webpack高版本切换到低版本)--直接覆盖

    (1)问题: webpack 4.14.0 版本太高,无法执行相关指令, (2) 解决办法:将高版本切换到低版本 (3)实现 webpack 4.14.0 版本太高,无法执行相关指令,指令不熟悉,高版 ...

最新文章

  1. Centos7.4 版本环境下安装Mysql5.7操作记录
  2. 2020个人Flag已立,欢迎监督!
  3. 去除字符串标点 + 泛型算法使用
  4. 设置MySQL服务的字符集为uft8
  5. curl参数为多维数组时提示数组到字符串的转换问题
  6. python enumerate_python中enumerate的用法实例解析
  7. 简述区块链(1)- 也许只有这一篇
  8. Linux基础入门学习笔记之二
  9. Eclipce Luna 离线安装ADT23
  10. 类图的使用 c# 1613918428
  11. textarea选中行删除_Easy Data Transform如何在Excel中删除重复的行?
  12. 一条长为L的绳子,一面靠墙,另外三边组成矩形,问此矩形最大面积能是多少?...
  13. 转:基于AOP实现Ibatis的缓存配置过期策略
  14. [转载] python 等号 重载_python运算符重载2
  15. NLP之电影评分数据的情感分析
  16. 用Python写一个语音播放软件
  17. 【LaTeX】 案例分析 (8) - 高等数学分析 Mathematica 实验报告
  18. 设置小程序video标签宽高比例为9/16
  19. 贝叶斯网络(belief network)
  20. Android工程师进阶第五课 多线程锁,线程池和DVM/ART优化

热门文章

  1. javascript动画函数封装(升级版)
  2. 不同存储区域的数组分析
  3. 自己挖的坑自己填--JVM报内存溢出
  4. Mybatis generator配置
  5. 关于渗透的一些思路持续更新(自我理解)
  6. 第二阶段第七次站立会议
  7. HDU2896 病毒侵袭
  8. 我的第一个python web开发框架(3)——怎么开始?
  9. BZOJ 3175 最大独立集
  10. MySQL的binlog日志