zoukankan      html  css  js  c++  java
  • 双链表(建立、删除、添加节点、打印)

    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <curses.h>
    using namespace std;
    
    typedef struct student
    {
        int data;
        struct student *next;
        struct student *pre;
    }dnode;
    
    dnode *creat()
    {
        dnode *head,*p,*s;
        int x,cycle=1;
        head=(dnode*)malloc(sizeof(dnode));
        p=head;
        while(cycle)
        {
            printf("
    please input the data:");
            scanf("%d",&x);
            if(x)
            {
                s=(dnode*)malloc(sizeof(dnode));
                s->data = x;
                printf("
     %d",s->data);
                p->next = s;
                s->pre = p;
                p=s;
            }
            else cycle=0;
        }
        head = head->next;
        head->pre = NULL;
        p->next = NULL;
    
        return head;
    }
    
    dnode* del(dnode *head,int num)
    {
        dnode *p1,*p2;
        p1=head;
        while(num!=p1->data && p1->next!=NULL)
            p1 = p1->next;
    
        if(num == p1->data)
        {
            if(p1 == head)
            {
                head = head->next;
                head->pre=NULL;
                free(p1);
            }
            else if(p1->next == NULL)
            {
                p1->pre->next = NULL;
                free(p1);
            }
            else
            {
                p1->pre->next = p1->next;
                p1->next->pre = p1->pre;
                free(p1);
            }
        }
        else
            printf("
    %d could not been found",num);
    
        return head;
    }
    
    dnode* insert(dnode *head,int num)
    {
        dnode *p0,*p1;
        p1=head;
        p0=(dnode*)malloc(sizeof(dnode));
        p0->data = num;
    
        while(p0->data>p1->data && p1->next!=NULL)
         p1 = p1->next;
    
        if(p0->data <= p1->data)
        {
            if(head == p1)
            {
                p0->next = p1;
                p1->pre = p0;
                head=p0;
            }
            else
            {
                p1->pre->next = p0;
                p0->next = p1;
                p0->pre = p1->pre;
                p1->pre = p0;
            }
        }
        else //p0->data is bigest
        {
            p1->next = p0;
            p0->pre = p1;
            p0->next = NULL;
        }
    
        return head;
    }
    
    int length(dnode *head) //measuring the length of list
    {
        int n=0;
        dnode *p;
        p=head;
        while(p)
        {
            p=p->next;
            n++;
        }
        return n;
    }
    
    int print(dnode *head) //print the list
    {
        dnode *p;
        int n=0,i=1;
        n=length(head);
        printf("
    Now.These %d records are: ",n);
        p=head;
        if(!head) return -1;
        while(p)
        {
            printf("
     %d   ",p->data);
            p=p->next;
        }
    }
    
    int main (int argc, char **argv)
    {
        dnode *head;
        int num,n;
        while(1)
        {
            printf("
    -----------------");
            printf("
    ******Menu****** |");
            printf("
    0:exit           |");
            printf("
    1:cerat dlist    |");
            printf("
    2:delete a dnode |");
            printf("
    3:insert a dnode |");
            printf("
    4:print dlist    |");
            printf("
    -----------------");
            printf("
     please chose your number listed above(0 mease stop): ");
            scanf("%d",&num);
            switch(num)
            {
                case 0: return 0;
                case 1: head=creat(); break;
                case 2: printf("
    chose the number you want delete: ");
                        scanf("%d",&n);
                        head=del(head,n);
                        break;
                case 3: printf("
    chose the number you want insert: ");
                        scanf("%d",&n);
                        head=insert(head,n);
                        break;
                case 4: print(head);break;
                default: printf("
    your number is invalid,please input again");break;
            }
        }
    } /*  ----- End of main() ----- */
  • 相关阅读:
    大型运输行业实战_day03_1_基于intellij idea的非maven spring+springMVC+mybatis搭建
    大型运输行业实战_day02_2_数据模型建立
    大型运输行业实战_day02_1_数据库设计与powerDesigner使用
    MySQL 并发控制(锁得使用)
    Oracle 日期减年数、两日期相减
    Oracle 递归拼接字段
    设计模式之适配器模式(结构型)
    设计模式之桥接模式(结构型)
    设计模式之装饰模式(结构型)
    Redis学习笔记之位图
  • 原文地址:https://www.cnblogs.com/zhanbiqiang/p/4056914.html
Copyright © 2011-2022 走看看