| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 954 人关注过本帖, 1 人收藏
标题:@renkejun1942 求一个链表逆序的泛型函数~
取消只看楼主 加入收藏
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
结帖率:99.25%
收藏(1)
已结贴  问题点数:100 回复次数:3 
@renkejun1942 求一个链表逆序的泛型函数~
@renkejun1942

最近做到广搜时打算在队尾用一个指针链接到队头来标记其遍历状态~以便于回溯搜索~不过这样打印出来的结果会是逆序的~现在有必要进行把的到数据进行逆序输出~当然也有其它处理方法例如交换搜索起点和终点~但这样究竟还是有很大的局限性~当然我自己也可以尝试敲敲~不过最近编程和学习还有别的任务就没啥时间去弄了~~如果有时间麻烦能不能弄个链表逆序的泛型函数~拜托了~~~
搜索更多相关主题的帖子: 起点 局限性 
2017-04-24 21:07
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 2楼 renkejun1942
感觉可以先自己做一个模板代码~然后用时就在模板代码上修改数据类型然后copy过去就可以了~还是谢过啦~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-04-24 22:04
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 4楼 renkejun1942
看了看~感觉链表操作有几个函数可以通用~
1~创建节点
2~插入节点
3~删除节点
4~销毁链表
5~链表转置~



[此贴子已经被作者于2017-4-24 23:08编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-04-24 23:07
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 6楼 renkejun1942
感觉插入应该只是new出节点并用memset初始化清零~然后在插入函数外面赋值~

写了个创建链表和销毁链表的泛型代码~
Link.h
程序代码:
#include<stdlib.h>
#include<string.h>
#include<assert.h>

//PTYPE 链表指针类型  NAME 函数名称 LEN 链表容量大小 NEXT链表指针名称 
#define MAKE(PTYPE,NAME,LEN,NEXT) \
\
void Creat_Node_##NAME(PTYPE* p) \
{   \
   *p=(PTYPE)malloc(LEN); \
   assert(*p!=NULL);  \
   memset(*p,0,LEN);   \
} \
\
void Del_One_##NAME(PTYPE* p) \
{  \
    if (*p==NULL)  \
        return ;  \
  \
    free(*p);  \
    *p=NULL;  \
}  \
void Del_Link_##NAME(PTYPE* p) \
{ \
    PTYPE t=*p;  \
    while (t=t->##NEXT)  \
    {  \
        Del_One_##NAME(p);  \
         *p=t;  \
    }  \
\
    *p=NULL;  \
} 




程序代码:
#include"Link.h"
#include<stdio.h>

typedef struct Node
{
    int n;
    struct Node* next;
}Node,*PNode;


MAKE(PNode,S,sizeof(Node),next)

PNode Creat_S(PNode p);
void Print(PNode p);

int main()
{
    PNode head=NULL;
    Creat_Node_S(&head);

    head=Creat_S(head);

    Print(head);

    Del_Link_S(&head);

    return 0;
}

PNode Creat_S(PNode head)
{
    int n=0;
    PNode p=NULL;
    PNode t=NULL;

    if (head==NULL)
        Creat_Node_S(&head);

    p=head;

    while (p->next)
        p=p->next;

    while (scanf("%d",&n)!=EOF)
    {
        Creat_Node_S(&t);
        t->n=n;
        p=p->next=t;
    }

    return head;
}

void Print(PNode p)
{
    if (p==NULL||p->next==NULL)
    {
        puts("这是一张空表!");
        return ;
    }

    while (p=p->next)
        printf("%-3d",p->n);

    puts("");
}

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-04-24 23:32
快速回复:@renkejun1942 求一个链表逆序的泛型函数~
数据加载中...
 
   



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

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