| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 636 人关注过本帖, 1 人收藏
标题:线性表的插入、删除的程序,帮忙看看出什么问题呢?
只看楼主 加入收藏
狮子
Rank: 2
等 级:论坛游民
帖 子:25
专家分:13
注 册:2009-5-23
结帖率:100%
收藏(1)
 问题点数:0 回复次数:1 
线性表的插入、删除的程序,帮忙看看出什么问题呢?
#include <stdio.h>
#include<malloc.h>


typedef struct node *pointer;/*定义变量*/   
struct node   
{   
    int data;   
    pointer   next;   
};   
typedef pointer   lklist;   

lklist create_lklist()/*建表*/   
{   
    lklist   head,p,q;   
    int   x;   
    head=(node *)malloc(sizeof(struct   node));   
    p=head;  //头结点 ,什么都不放,只是个指向lklist的指针
    printf("\n请输入数据:\n");   
    scanf("%d",&x);   
    while(x!=-1)   //当输入-1是输入结束
    {   
        q=(node *)malloc(sizeof(struct   node)); //开拓一个存储空间  
        q->data=x;   
        p->next=q;  //连上
        p=q;   
        printf("\n请输入数据:\n");   //继续循环
        scanf("%d",&x);   
    }   //-1时结束
    p->next=NULL;   //p是移动的,从头到尾一直都作为装卸工。最后,q赋给了p,后将q 中的next赋予NULL
    return(head);   //将头结点返回,这样就可以提纲挈领了。
}   
void   out_lklist(lklist   head)/*输出*/   
{   
    int   i=0;   
    lklist   p=head;   //此处p作用也是装卸工,不过此处是将一个链表的头结点给过来,然后就一个个读取。
    while(p->next!=NULL)   //当链表到达结尾时就结束循环
    {   
        p=p->next;   //先移向下一个节点
        i++;   //位置标示量再加一
        printf("\n结点%d数据为:%d",i,p->data);   
        
    }   
    return;   
}  
lklist  find_lklist(lklist head,int n)//寻找
{
    int i=1,c=0;
    lklist p=head;
    while( i!=n )//p!=NULL && p->next !=NULL
    {
        i++;
        if(p==NULL || p->next==NULL)
        {
            printf("链表为空!\n");
            break;
        }
        p=p->next;
        
        
    }
    return p;
}

void   del_lklist(lklist   head,int   i)/*删除*/
{   
    lklist   p,q;  
    int e;
    p=find_lklist(head,i-1);   
    if((p!=NULL)||(p->next!=NULL))   //判断此链表是否为空
    {   
        q=p->next;   //注意:是先指向下一个再释放空间!
        p->next=q->next;
        e=q->data;
        free(q);   
    }   
    else   
    {   
        printf("\n不存在第%d个结点",i);   //若为空,则打印这句话
        return;   
    }   
    return;   
}   

void   insert_lklist(lklist   head,int   x,int   i)   //插入,在第i个节点那里插入x;
{
    lklist   p,s;   
    p=find_lklist(head,i-1);   //寻找第i-1个节点
    if(p==NULL)   
    {   
        printf("\n不存在第%d个位置",i);   //如果第i-1 个节点是空,就打印“没有”;
        return;   
    }   
    else   
    {   
        s=(node *)malloc(sizeof(struct   node));   //否则,就在其后面添加一个节点,插入x。
        s->next=p->next;   
        p->next=s;
        s->data=x;
        return;
    }   
}   


int main()   
{
    lklist   head1;   
    int   y,z;   
   
    head1=create_lklist();   
    out_lklist(head1);   
   
    printf("\n请输入插入数据:\n");   
    printf("\n请输入插入序号:\n");   
    scanf("%d,%d",&y,&z);   
    insert_lklist(head1,y,z);   
    out_lklist(head1);   
   
    printf("\n请输入删除结点序号:\n");   
    scanf("%d",&y);   
    del_lklist(head1,y);   
    out_lklist(head1);   
    return 0;
}
搜索更多相关主题的帖子: 删除 线性 
2009-10-12 20:43
xiaoqing8731
Rank: 2
等 级:论坛游民
帖 子:23
专家分:32
注 册:2009-10-9
收藏
得分:0 
里面的小问题太多   建议你找一本书  数据结构方面的好好看看链表的实现   结构体本身有点问题哈哈   继续努力
2009-10-12 21:54
快速回复:线性表的插入、删除的程序,帮忙看看出什么问题呢?
数据加载中...
 
   



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

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