Chinaunix首页 | 论坛 | 博客
  • 博客访问: 963936
  • 博文数量: 335
  • 博客积分: 10287
  • 博客等级: 上将
  • 技术积分: 3300
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-08 15:29
文章分类

全部博文(335)

文章存档

2015年(4)

2014年(15)

2013年(17)

2012年(11)

2011年(12)

2010年(96)

2009年(27)

2008年(34)

2007年(43)

2006年(39)

2005年(37)

我的朋友

分类: C/C++

2010-03-17 00:29:39

#include "stdio.h"
typedef struct lnode       /*定义节点类型*/
{
    char data;             /*数据域*/
    struct lnode *next;    /*指针域*/
    }lnode;

/*函数名称:creat*/
/*功能描述:生成单链表*/
/*返回类型:无返回值*/
/*函数参数: h:单链表头指针*/
void creat(lnode *h)
{
    lnode *t,*p;
    char ch;
    t=h;
    while((ch=getchar())!='\n')
    {
        /*尾插法建立链表*/
        p=(lnode*)malloc(sizeof(lnode)); /*生成新结点p,并分配内存空间*/
        p->data=ch;
        p->next=NULL;    /*p的指针域为空*/
        t->next=p;       /*p的next指向这个结点*/
        t=p;             /*t指向这个结点*/
     }
}

/*函数名称:print*/
/*功能描述:遍历单链表*/
/*返回类型:无返回值*/
/*函数参数:h:单链表头指针*/
void print(lnode *h)
{
    lnode *p;
    p=h->next;
    while(p)
    {
        printf("%c",p->data); /*输出p的数值域*/
        p=p->next;            /*p指向下一结点*/
    }
}

/*函数名称:length*/
/*功能描述:求单链表长度*/
/*返回类型:无返回值*/
/*函数参数:h:单链表头指针*/
void length(lnode *h)
{  
    lnode *p;
    int i=0;         /*记录链表长度*/
    p=h->next;
    while(p!=NULL)    /*循环,直到p指向空*/
    {
        i=i+1;
        p=p->next;   /*p指向下一结点*/
     }
     printf(" %d",i); /*输出p所指接点的数据域*/
}

/*函数名称:insert*/
/*功能描述:插入函数*/
/*返回类型:整型*/
/*函数参数:h:单链表头指针 x:要插入的元素 i:要插入的位置*/
int insert(lnode *h,char x,int i)
{  
    lnode *p,*s;
    int j;
    p=h->next;     /*此时p为首指针*/
    j=1;
    while(p&&j    {
        ++j;
        p=p->next;  /*p指向下一结点*/
     }
    if(i>0&&j==i)
     {
        s=(lnode*)malloc(sizeof(lnode)); /*生成新结点s,并分配内存空间*/
        s->data=x;        /*把x赋值给s的数据域*/
        s->next=p->next;  /*s指向p的下一结点*/
        p->next=s;        /*p指向s*/
        return(1);         /*如果成功返回1*/
      }
    else
        return(0);          /*如果失败就返回0*/
}

/*函数名称:delete_*/
/*功能描述:删除函数*/
/*返回类型:整型*/
/*函数参数:h:单链表头指针 i:要删除的位置*/
int delete_(lnode *h,int i)
{  
    lnode *p,*q;
    int j;
    p=h->next;        /*此时p为首结点*/
    j=1;
    while(p&&j    {
        ++j;
        p=p->next;
     }
     if(i>0&&j==i-1)
     {
        q=p->next;    /*q指向要删除结点的结点*/
        p->next=q->next;/*p的下一个结点为q的的下一个结点*/
        free(q);       /*释放q的空间*/
        return(1);       /*如果成功返回1*/
      }
      else
        return(0);      /*如果失败就返回0*/
}

/*函数名称:locate_*/
/*功能描述:查找函数*/
/*返回类型:整型*/
/*函数参数:h:单链表头指针 x:要查找的值*/
void locate(lnode *h,char x)
{
    lnode *p;
    p=h->next;    /*此时p为首结点*/
    while(p!=NULL&&p->data!=x) /*进入循环,直到p为空,或找到x*/
        p=p->next;   /*s指向p的下一结点*/
    if(p!=NULL)
        {
            printf("seccess!\n");
            printf("You want lookup the node is: %c",p->data); /*输出查找的值*/
         }
    else
        printf("Cann't lookup the node!\n");
}
   
/*主函数*/
void main()
{
    int i,j,k;
    char x,y;
    lnode *h;
    h=(lnode*)malloc(sizeof(lnode));  /*定义头结点,并分配空间*/
    h->next=NULL;      /*h指向空*/
    printf("please input a link:\n");
    creat(h);   /*调用建立链表函数*/
    /*功能选择菜单*/
    while(1)
    {
        printf("\n");
        printf("\n");
        printf("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
        printf("+++========= 1.show the link ===============================================++++");
        printf("+++========= 2.show the link's long ========================================++++");
        printf("+++========= 3.insert a node ===============================================++++");
        printf("+++========= 4.delete a node ===============================================++++");
        printf("+++========= 5.find a node =================================================++++");
        printf("+++========= 6.exit ========================================================++++");
        printf("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
        printf("\n");
        printf("please choice(1-6):");
        scanf("%d",&i);       /*功能选择变量*/

            if(i<0||i>7)
            printf("please right choice!\n");
            if(i==1)
            {
                    printf("The link's node is:");
                    print(h);   /*调用输出函数*/
            }
            if(i==2)
            {
                printf("\nThe link's long is:");
                length(h);                 /*调用求长度函数*/
                printf("\n");
            }
            if(i==3)
            {
                    getchar();
                printf("please input new node:");
                    x=getchar();
                printf("\nplease input new node's place:");
                    scanf("%d",&j);
                insert(h,x,j);               /*调用插入函数*/
             }
            if(i==4)
            {
                printf("please input the please that you want locate:\n");
                    scanf("%d",&k);
                delete_(h,k);                 /*调用删除函数*/
             }
            if(i==5)
            {
                getchar();
                printf("please input the node that you want lookup:");
                    y=getchar();
                locate(h,y);                 /*调用查找函数*/
            }
            if(i==6)break;
     }
     printf("\n Press any key to quit...");
getch();
}
阅读(506) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~