| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1806 人关注过本帖
标题:在双向链表中插入元素,弄了好久都不行啊,求助
取消只看楼主 加入收藏
wwqiu
Rank: 2
等 级:论坛游民
帖 子:19
专家分:12
注 册:2010-7-28
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
在双向链表中插入元素,弄了好久都不行啊,求助
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
/*类型定义*/
typedef char DataType;
typedef struct Node
{
    DataType data;
    struct Node *prior;
    struct Node *next;
}DListNode,*DLinkList;
/*函数声明*/
DListNode *GetElem(DLinkList head,int i);
void PrintDList(DLinkList head);
int CreateDList(DLinkList head,int n);
int InsertDList(DLinkList head,int i,char e);
/*函数实现*/
int InitDList(DLinkList *head)
/*初始化双向循环链表*/
{
    *head=(DLinkList)malloc(sizeof(DListNode));
    if(!head)
        return -1;
    (*head)->next=*head;            /*使头结点的prior指针和next指针指向自己*/
    (*head)->prior=*head;
    return 1;
}
int CreateDList(DLinkList head,int n)
/*创建双向循环链表*/
{
    DListNode *p,*q;
    int i;
    char e;
    q=head;
    for(i=1;i<=n;i++)
    {
        printf("输入第%d个元素",i);
        e=getchar();
        p=(DListNode*)malloc(sizeof(DListNode));
        p->data=e;
        /*将新生成的结点插入到双向循环链表*/
        p->next=q->next;
        q->next=p;
        p->prior=q;
        head->prior=p;                /*这里要注意头结点的prior指向新插入的结点*/
        q=p;                        /*q始终指向最后一个结点*/
        getchar();
    }   
    return 1;
}
int InsertDList(DLinkList head,int i,char e)
/*在双向循环链表的第i个位置插入元素e。插入成功返回1,否则返回0*/
{
    DListNode *p,*s;
    p=GetElem(head,i);                /*查找链表中第i个结点*/
    if(!p)
        return 0;
    s=(DListNode*)malloc(sizeof(DListNode));
    if(!s)
        return -1;
    s->data=e;
    /*将s结点插入到双向循环链表*/
    s->prior=p->prior;
    p->prior->next=s;
    s->next=p;
    p->prior=s;
    return 1;
}
DListNode *GetElem(DLinkList head,int i)
/*查找插入的位置,找到返回该结点的指针,否则返回NULL*/
{
    DListNode *p;
    int j;
    p=head->next;
    j=1;
    while(p!=head&&j<i)
    {
        p=p->next;
        j++;
    }
    if(p==head||j>i)                /*如果要位置不正确,返回NULL*/
        return NULL;
    return p;
}
void main()
{
    DLinkList h;
    int n;
    int pos;
    char e;
    InitDList(&h);
    printf("输入元素个数:");
    scanf("%d",&n);
     getchar();
    CreateDList(h,n);
    printf("链表中的元素:");
    PrintDList(h);
    printf("请输入插入的元素及位置:");
    scanf("%c",&e);
    getchar();
    scanf("%d",&pos);
    InsertDList(h,pos,e);
    printf("插入元素后链表中的元素:");
    PrintDList(h);
}
void PrintDList(DLinkList head)
/*输出双向循环链表中的每一个元素*/
{
    DListNode *p;
    p=head->next;
    while(p!=head)
    {
        printf("%c",p->data);
        p=p->next;
    }
    printf("\n");
}
搜索更多相关主题的帖子: 链表 元素 
2010-08-09 09:21
wwqiu
Rank: 2
等 级:论坛游民
帖 子:19
专家分:12
注 册:2010-7-28
收藏
得分:0 
可以编译,但是输入插入的元素之后,再输出链表,没有变化啊,就是元素好像没有插入到链表中
2010-08-09 13:13
wwqiu
Rank: 2
等 级:论坛游民
帖 子:19
专家分:12
注 册:2010-7-28
收藏
得分:0 
我把你的代码运行了一下,结果和我上面的好像一样啊,也不行啊
怎么回事呢???
2010-08-09 14:34
wwqiu
Rank: 2
等 级:论坛游民
帖 子:19
专家分:12
注 册:2010-7-28
收藏
得分:0 
分给了,但是有个问题好奇怪的,我第一次发的源代码下午的时候,是可以编译,但是插入不了元素,现在我又试了原来的代码,不知道为什么又可以插入元素了,这是为什么呢???
2010-08-09 20:29
快速回复:在双向链表中插入元素,弄了好久都不行啊,求助
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017406 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved