免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 640 | 回复: 0
打印 上一主题 下一主题

单链表 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-15 20:16 |只看该作者 |倒序浏览

//链式存储结构 -- 单链表
#include stdio.h>
#include stdlib.h>
#include string.h>
typedef struct node{ //结点类型定义
    int data; //结点的数据域
    struct node *next; //结点的指针域
}ListNode;
typedef ListNode *LinkList;
ListNode *p;
ListNode *pHead = NULL;
//改进:使用与线分配好的静态数组避免malloc失败
//use static buffer
//int a[100] = {0};
//用尾插法建立带头结点的单链表 O(n)
LinkList CreatListR1(void)
{
    char ch;
    LinkList head=(ListNode *)malloc(sizeof(ListNode));//生成头结点
    ListNode *s,*r; //工作指针
    r=head; // 尾指针初值也指向头结点
    while((ch=getchar())!='\n'){
        s=(ListNode *)malloc(sizeof(ListNode));//生成新结点
        s->data=ch; //将读入的数据放入新结点的数据域中
        r->next=s;
        r=s;
    }
    r->next=NULL;//终端结点的指针域置空,或空表的头结点指针域置空
    return head;
}
//尾插法建循环单链表 返回单链表的头指针 O(n)
LinkList CreatListB(int len)
{
    LinkList head = NULL; //头指针
    ListNode *s = NULL; //工作指针
    ListNode *r = NULL; //工作指针(尾)
        
    for(int i=1; i=len; ++i){
        s=(ListNode *)malloc(sizeof(ListNode));//生成新结点
        s->data = i;
        if (head==NULL)
            head=s;//新结点插入空表
        else
            r->next=s;//将新结点插到*r之后
        r=s;//尾指针指向新表尾
    }
    r->next = head;//头尾相连
   
    return head;
}
//头插法建循环单链表 返回单链表的头指针 O(n)
LinkList CreatListF(int len)
{
    LinkList head = NULL; //头指针
    ListNode *s = NULL; //工作指针
    ListNode *r = NULL; //工作指针(尾)
    for(int i=1; i=len; ++i){
        s = (ListNode *)malloc(sizeof(ListNode));
        s->data = i;
        s->next = head;
        if(head!=NULL)
            head = s;
        else
            r = head = s;
    }
    r->next = head;//头尾相连
   
    return head;
}
//打印循环链表
void printList(LinkList p)
{
    ListNode *head = p;
    ListNode *tmp = p;
    if(p->next == p){
        printf("%d\n", tmp->data);
        return;
    }
    do{
        printf("%d ", tmp->data);
        tmp = tmp->next;
    }while(head != tmp);
    putchar('\n');
}
int main(void)
{
    int len;
    printf("input len: ");
    scanf(" %d", &len);
    LinkList p1 = CreatListF(len);
    printList(p1);
    LinkList p2 = CreatListB(len);
    printList(p2);
    return 0;
}


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/5933/showart_278538.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP