zoukankan      html  css  js  c++  java
  • Doubly Linked List,( Aizu

    题目链接 : 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("
    ");
    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  } 
  • 相关阅读:
    1. Dubbo原理解析-Dubbo内核实现之SPI简单介绍 (转)
    经典算法问题的java实现 (二)
    经典算法问题的java实现 (一)
    Bitmap的秘密
    Java Networking: UDP DatagramSocket (翻译)
    Java字节码浅析(二)
    Sql server 浅谈用户定义表类型
    Jquery 动态生成表单 并将表单数据 批量通过Ajax插入到数据库
    ASP.NET获取上传图片的大小
    ASP.Net大文件上传组件详解
  • 原文地址:https://www.cnblogs.com/Dicer/p/8509791.html
Copyright © 2011-2022 走看看