双向链表的基本操作

原创 2015年07月06日 22:16:22

#include <stdio.h>
#include <stdlib.h>
typedef struct List
{
     struct List *next,*prev;
     int item;
}List,*link;
link init();    //链表的初始化
link headinsert(); //每次在链表的头部添加新结点
link orderinsert();  //创建一个顺序的链表
link delete(link ,int);  //在链表中找到元素并删除
void show(link );

int main()
{
    List *p,*q,*L;
    printf("头插入法创建双向链表: \n");
    p = headinsert();
    show(p->next);
    printf("创建非降序双向链表: \n");
    q = orderinsert();
    show(q->next);
    printf("删除指定元素: \n");
    L = delete(q->next,20);
    show(L);
    return 0;
}

link init()
{
    List *st = malloc(sizeof(*st));
    st->next = NULL;
    st->prev = NULL;
    return st;
}

link headinsert()
{
    int x;
    List *st;
    st = init();
    while(scanf("%d",&x) != EOF)
    {
        st->item = x;
        List *p = malloc(sizeof(*p));
        st->prev = p;
        p->next = st;
        p->prev = NULL;
        st = p;
    }
    return st;
}

link orderinsert()
{
    int x;
    List *head,*st;
    st = init();
    head = st;
    while(scanf("%d",&x) != EOF)  //顺序输入数据
    {
        List *q = malloc(sizeof(*q));
        q->item = x;
        st->next = q;
        q->prev = st;
        q->next = NULL;
        st = st->next;
    }
    return head;

}

link delete(link st,int a)
{
    List *p,*t;
    int i = 0;
    p = st;
    while(st->next != NULL)
    {
        if(st->item == a)
        {
            st->prev->next = st->next;
            st->next->prev = st->prev;
            t = st->next;
            free(st);
            st = t;
            i++;
            break;
        }
        else
          st = st->next;
    }
    if(!i)
        printf("链表中没有此元素:%d!",a);
    return p;
}

void show(link st)
{
    int N = 0;
    while(st->next != NULL)
    {
        printf("%5d",st->item);
        st = st->next;
        N++;
    }
    printf("\n");
    printf("链表中元素个数为%d\n",N);
}

相关文章推荐

双向链表的基本操作C语言

  • 2017年05月02日 11:03
  • 172KB
  • 下载

数据结构——双向链表实现,基本操作的C++版

对于循环双向链表 判断一个链表是否为空的条件为:head->next==head (头指针) 判断*p为最后一个节点的条件为:p->next=head [cpp] v...

C语言(数据结构) - 双向链表的基本操作

/*dlist.h*/ #ifndef DList_H #define DList_H typedef int Item; typedef struct N...

双向链表的基本操作(python)

用python实现单链表的增删改查 #!/usr/bin/python #coding: utf-8 class Node(object): u"数据类" def __init__(self, ...

Java实现双向链表的基本操作

Java实现双向链表的基本操作

数据结构双向链表的基本操作,包括创立,删除,添加和遍历等

最近在写双向链表,看了好长时间也没有成功,就在网上查了一个,感觉还不错,就转载了看看,仔细研究研究 #include "stdafx.h" #include #include #define ...
  • wys_NO1
  • wys_NO1
  • 2016年11月03日 19:56
  • 249

数据结构 - C语言版 - 双向链表 所有基本操作

C语言 - 双向链表 所有基本操作 // VC++ 6.0 编译通过 /* 时间: 2013年10月15日 02:20:48 功能: 数据结构 - 双向链表 目的: 创建,输出,插...

双向链表的建立与基本操作

双向链表比单链表有更好的灵活性,其大部分操作与线性表相同。下面总结双向链表与单链表之间的不同之处及我在实现过程中所遇到的问题。1.双向链表的建立 双向链表在初始化时,要给首尾两个...

数据结构(4):双向链表的基本操作

双向链表的基本操作。双向链表的反转。函数的引用传递、指针传递、值传递。...
  • qcyfred
  • qcyfred
  • 2017年01月11日 12:05
  • 111
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:双向链表的基本操作
举报原因:
原因补充:

(最多只允许输入30个字)