| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 750 人关注过本帖, 2 人收藏
标题:刚编的链表程序**晒晒**
只看楼主 加入收藏
取消关键字高亮
诸葛修勤
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:11
帖 子:549
专家分:1955
注 册:2010-10-28
结帖率:96.55%
收藏(2)
已结贴  问题点数:50 回复次数:6 
刚编的链表程序**晒晒**
程序代码:
/*带头结点的双向循环链表相关操作 结点采用尾部插入*/
#include <stdio.h>
#include <stdlib.h>

struct node
{
    int data;
    struct node *next;//后继
    struct node *prev;//前驱
};

struct node *temp;

//初始化链表
struct node * init_list(struct node *head)
{
    head = (struct node*) malloc (sizeof (struct node));

    if (NULL == head)
    {
        exit(-1);
    }
   
    head->next = head;
    head->prev = head;
   
    return head;
}

//添加结点
void add(struct node *next, struct node *prev, struct node *position)
{
    position->next = next;
    prev->next = position;
    position->prev = prev;
    next->prev = position;
}

//向链表中添加结点
void add_node(struct node *head, struct node *position)
{
    add(head->prev->next, head->prev, position);
}

//删除结点 返回被删的上一个结点
struct node * delet(struct node *next, struct node *prev)
{
    prev->next = next;
    next->prev = prev;

    return prev;
}

//从链表中删除某结点 与data数值相同的
void delet_node(struct node *head, int data)
{
    struct node *p;
    temp = head->next;

    while (temp != head)
    {
        if (temp->data == data)
        {
            p = delet(temp->next, temp->prev);
            free(temp);
            temp = p;
        }
       
        temp = temp->next;
    }
}

//修改链表中的结点 与data数值相同的
void chg_node(struct node *head, int data, int newValue)
{
    temp = head->next;

    while (temp != head)
    {
        if (temp->data == data)
        {
            temp->data = newValue;
        }
        temp = temp->next;
    }
}

//删除整个链表
void delet_list(struct node *head)
{
    temp = head->next;
   
    while (temp != head)
    {
        delet (temp->next, temp->prev);
        free(temp);
        temp = head->next;
    }

    free(head);
    head = NULL;
    printf("删除成功!\n");
}
//先序打印
void prev_print_list(struct node *head)
{
    temp = head->next;

    while (temp != head)
    {
        printf("%d ", temp->data);
        temp = temp->next;
    }
    printf("\n");
}
//后序打印
void post_print_list(struct node *head)
{
    temp = head->prev;

    while (temp != head)
    {
        printf("%d ", temp->data);
        temp = temp->prev;
    }
    printf("\n");
}

void function()
{
    struct node *head = NULL;
    struct node *temp = NULL;
    int index = 10;

    printf("初始化链表\n");
    head = init_list(head);//初始化
    printf("先序打印双向循环链表:");
    prev_print_list(head);
    printf("后序打印双向循环链表:");
    post_print_list(head);

    printf("\n\n项链表中连续插入 %d 个元素\n", index);
    while (index)
    {
        temp = (struct node*) malloc (sizeof(struct node));
        temp->data = index--;
        add_node(head, temp);//向链表中添加结点
    }
    printf("先序打印双向循环链表:");
    prev_print_list(head);
    printf("后序打印双向循环链表:");
    post_print_list(head);

    printf("\n\n删除数据为 3 的结点\n");
    delet_node(head, 3);
    printf("先序打印双向循环链表:");
    prev_print_list(head);
    printf("后序打印双向循环链表:");
    post_print_list(head);
   
    printf("\n\n修改数据为 4 的结点 新值为 18\n");
    chg_node(head, 4, 18);
    printf("先序打印双向循环链表:");
    prev_print_list(head);
    printf("后序打印双向循环链表:");
    post_print_list(head);
   
    printf("\n\n删除整个链表\n");
    delet_list(head);
}

int main(void)
{
    function();

    return 0;
}
收到的鲜花
搜索更多相关主题的帖子: 链表程序 
2011-05-09 18:35
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:50 
编程风格挺好的 呵呵

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2011-05-10 12:05
lly10120303
Rank: 2
等 级:论坛游民
帖 子:11
专家分:12
注 册:2011-3-30
收藏
得分:0 
这个收藏了
2011-05-11 23:01
gyw520gyw
Rank: 2
等 级:论坛游民
帖 子:11
专家分:10
注 册:2010-11-29
收藏
得分:0 
…………
2011-05-16 19:06
水木天
Rank: 1
等 级:新手上路
帖 子:11
专家分:8
注 册:2011-5-12
收藏
得分:0 
编程习惯很好哈
2011-05-18 12:02
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
顶一下~~~ 学习
2011-05-19 23:47
lly10120303
Rank: 2
等 级:论坛游民
帖 子:11
专家分:12
注 册:2011-3-30
收藏
得分:0 
#include <stdio.h>
#include <stdlib.h>
 struct node
{
    int data;
    struct node *pre;
    struct node *next;
};
//双向链表初始化,即创建了一个表头
struct node *initlink(struct node *head)
{
    head = (struct node*) malloc (sizeof (struct node));
    if (NULL == head)
    {
        exit(1);
    }
    head->pre=head;
    head->next=head;
}
//在节点b及b->next之间添加节点a
void add(struct node *b,struct node *a)
{
    a->next=b->next;
    b->next=a;
    a->pre=b;
    b->next->pre=a;
}
//删除节点a,并返回a的前一个节点
struct node *dele(struct node *a)
{
    struct node *temp;
    temp=a->pre;
    a->pre->next=a->next;
    a->next->pre=a->pre;
    free(a);
    return temp;
}
//先序打印
void prev_print_list(struct node *head)
{
    struct node *temp;
    temp = head->next;

    while (temp != head)
    {
        printf("%d ", temp->data);
        temp = temp->next;
    }
    printf("\n");
}
//后序打印
void post_print_list(struct node *head)
{
    struct node *temp;
    temp = head->pre;

    while (temp != head)
    {
        printf("%d ", temp->data);
        temp = temp->pre;
    }
    printf("\n");
}
   
void main()
{
    printf("创建一个双向链表\n");
    struct node *head=NULL;
    struct node *temp;
    struct node *p;
    int i=1,n;
    head=initlink(head);
    printf("输入链表的个数n\n");
    scanf("d%",&n);
    printf("输入链表的数据\n");
   
    while(i<=n)
    {
        scanf("d%",&d);
        temp=(struct node*) malloc (sizeof(struct node));
         if (NULL == temp)
         {
             printf("节点分配不成功\n");
         }
         temp->data=d;
         add(head->pre,temp);
         i++;
    }
    printf("先序打印双向循环链表:");
    prev_print_list(head);
    printf("后序打印双向循环链表:");
    post_print_list(head);

    printf("\n\n删除数据为 3 的结点\n");
    temp=head->next;
    while(temp!=head)
    {
        if(temp->data==3)
        {
            p=dele(head, temp);
            temp=p;
        }
        temp=temp->next;
    }
    printf("先序打印双向循环链表:");
    prev_print_list(head);
    printf("后序打印双向循环链表:");
    post_print_list(head);
}
这个程序是看完你的后自己动手编的,不知道为什么就是有错,帮指点下,C语言不熟悉
2011-05-20 22:41
快速回复:刚编的链表程序**晒晒**
数据加载中...
 
   



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

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