Chinaunix首页 | 论坛 | 博客
  • 博客访问: 43398
  • 博文数量: 24
  • 博客积分: 920
  • 博客等级: 准尉
  • 技术积分: 235
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-05 11:10
文章分类
文章存档

2011年(1)

2010年(3)

2009年(20)

我的朋友
最近访客

分类: C/C++

2009-10-28 21:38:31

1.单链表的创建(头插法、尾插法),插入、删除结点,链表的逆置、排序
#include
#include
/*创建链表结构体*/
typedef struct LNode
{
    int data;
    struct LNode *next;
}LNode,*LinkList;
/*尾插法创建链表*/
void create_tail(LinkList L)
{
    LNode *r,*s;
    int n,flag=1;
    r=L;
    while(flag)
    {
        scanf("%d",&n);
        if(n>0)
        {
            s=(LinkList)malloc(sizeof(LNode));
            s->data=n;
            r->next=s;
            r=s;
        }
        else
            flag=0;
    }
    r->next=NULL;
}
/*头插法创建链表*/
void create_head(LinkList L)
{
    LNode *r,*s;
    int n,flag=1;
    r=L;
    while(flag)
    {
        scanf("%d",&n);
        if(n>0)
        {
            s=(LinkList)malloc(sizeof(LNode));
            s->data=n;
            s->next=r->next;
            r->next=s;
        }
        else
            flag=0;
    }
}
/*插入结点*/
void list_insert(LinkList L,int i,int e)
{
    LNode *p=L,*s;
    int j=0;
    while(p!=NULL&&j     {
        p=p->next;
        j++;
    }
    if(p!=NULL)
    {
        s=(LinkList)malloc(sizeof(LNode));
        s->data=e;
        s->next=p->next;
        p->next=s;
        printf("insert is OK!\n");
    }
    else
        printf("insert is wrong!\n");
}
/*删除结点*/
void list_delete(LinkList L,int i)
{
    LNode *p=L,*s;
    int j=0,e;
    while(p!=NULL&&j     {
        p=p->next;
        j++;
    }
    if(p!=NULL)
    {
        s=p->next;
        e=s->data;
        p->next=p->next->next;
        free(s);
        printf("delete is OK!\n");
    }
    else
        printf("delete is wrong!\n");
}
/*链表的逆置*/
void list_reverse(LinkList L)
{
        LNode *p,*q;
        p=L->next;
        L->next=NULL;
        while(p!=NULL)
        {
                q=p->next;
                p->next=L->next;
                L->next=p;
                p=q;
        }
}
/*链表的排序(冒泡法)*/
void list_sort(LinkList L)
{
    LNode *p,*q,*small;
    int temp;
    for(p=L->next;p->next!=NULL;p=p->next)
    {
        small=p;
        for(q=p->next;q;q=q->next)
            if(q->datadata)
                small=q;
        if(small!=p)
        {
            temp=p->data;
            p->data=small->data;
            small->data=temp;
        }
    }
}
/*主函数*/
int main()
{
    LinkList L;
    LNode *p;
    L=(LinkList)malloc(sizeof(LNode));
    L->next=NULL;
    create_tail(L);
//  create_head(L);
//  list_insert(L,3,9);
//  list_delist_reverse(L);
//  list_reverse(L);
    p=L;
    printf("output LinkList:\n");
    while(p->next!=NULL)
    {
        p=p->next;
        printf("%d\n",p->data);
    }
    return 0;
}
2.单链表的求长度、查找
(*注:头文件、链表结构体定义、链表创建和第一题相同,故省略)
/*查找某个元素*/
LNode * locate(LinkList L,int k)
{
    LNode *p=L->next;
    while(p!=NULL)
    {
        if(p->data!=k)
            p=p->next;
        else
            break;
    }
    return p;
}
/*求链表长度*/
int list_length(LinkList L)
{
        LNode *p;
        p=L->next;
        int j=0;
        while(p!=NULL)
        {
                p=p->next;
                j++;
        }
        return j;
}
/*主函数*/
int main()
{
    LinkList L;
    LNode *p;
    int n;
    L=(LinkList)malloc(sizeof(LNode));
    L->next=NULL;
    creat_tail(L);
    n=list_length(L);
    printf("length=%d\n",n);
    p=locate(L,4);
    if(p!=NULL)
    {
        printf("number is find:");
        printf("%d\n",p->data);
    }
    else
        printf("number isn't find!\n");
    return 0;
}
阅读(848) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~