| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 406 人关注过本帖
标题:明天交作业 链表的删除子函数 能正确输出结果就是这个地方运行完之后自 ...
只看楼主 加入收藏
子弹上膛
Rank: 1
等 级:新手上路
帖 子:22
专家分:4
注 册:2012-12-5
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:1 
明天交作业 链表的删除子函数 能正确输出结果就是这个地方运行完之后自动终止了 实在看不出什么原因了
void shanchu(Linklist &L)                       //删除函数
{
    Linklist p;
    Linklist q;
    int i;
    printf("请输入要删除的位置\n");
    scanf("%d",&i);                             //删除第i个位置
     p=L;
    int j=0;
    while(p->next&&j<i-1)
    {
        p=p->next;                               //p为第i-1个位置的元素地址
        ++j;
    }
   
    {
       q=p->next;                                //q为要删除元素的位置
       p->next=q->next;
      
       free(q);
    }  
      
   

}




全部程序              可以运行试试!
#include<stdio.h>
#include<stdlib.h>

typedef struct LNode{
    int data;
    struct LNode *next;
}LNode,*Linklist;

Linklist L;

int N;
                           
void shuru(Linklist &L)         //头插法 输入函数
{
    int i;
    printf("您要输入N个数\nN=");
    scanf("%d",&N);

   
   
    L=(Linklist)malloc(sizeof(LNode));
    L->next=NULL;
    Linklist p;

    for(i=0;i<N;i++)
    {
        p=(Linklist)malloc(sizeof(LNode));
        scanf("%d",&p->data);
        
        p->next=L->next;
        L->next=p;
    }
}


int shuchu(Linklist &L)                     //输出函数
{
    Linklist p;

    int m;
    p=L->next;
    for(m=0;m<N;m++)
    {
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");

    return 0;
   
}

int chazhao(Linklist &L)                     //查找函数
{
    int i;                                   //i 表示第i个元素
    printf("请输入你要查找的数值\n");
    scanf("%d",&i);
                           
    Linklist p;
    p=L->next;                               //初始化 p指向第一个结点
    int j=1;                                 //j为计数器
    while(p&&j<i)
    {
        p=p->next;
        j++;
    }
    if(!p||j>i)return 0;
   
    printf("你要查找的数值是%d\n",p->data);
    return 0;
   
}

int charu(Linklist &L)                              //插入函数
{
    int m,n;
    printf("请输入您要插入的元素及其位置");
    scanf("%d %d",&m,&n);
    Linklist s;
    s=(Linklist)malloc(sizeof(LNode));
    s->data=m;

    Linklist p;                                     //查找位置n
    p=L->next;                                
    int j=1;                                        //j为计数器               
    while(p&&j<n-1)
    {
        p=p->next;
        j++;
    }
    if(!p||j>n-1)return 0;                            //现在的P就是要找的位置

    s->next=p->next;
    p->next=s;
    N++;

    return 0;
}


void shanchu(Linklist &L)                       //删除函数
{
    Linklist p;
    Linklist q;
    int i;
    printf("请输入要删除的位置\n");
    scanf("%d",&i);                             //删除第i个位置
     p=L;
    int j=0;
    while(p->next&&j<i-1)
    {
        p=p->next;                               //p为第i-1个位置的元素地址
        ++j;
    }
   
    {
       q=p->next;                                //q为要删除元素的位置
       p->next=q->next;
      
       free(q);
    }  
      
   

}[/color]

int jishu(Linklist &L)                       //计数函数
{
                                         
    Linklist p;
    p=L->next;                               //初始化 p指向第一个结点
    int j=0;                                 //j为计数器
    while(p!=NULL)
    {
        p=p->next;
        j++;
    }
    N=j;
   
    printf("总共有%d个数值\n",N);
   
    return 0;
}


int paixu(Linklist &L)                         //排序函数
{
    int k;
    Linklist m,q,p;                                                            

    for(q=L->next;q;q=q->next)                 //q是要排的第几个数值  m始终是最小值的结点  q
    {
        m=q;                                 
        for(p=q;p;p=p->next)                    //循环找到data的最小值
          if((m->data)>=(p->data))
           {
               m=p;
           }                                     //现在最小值是m->data
                                   
            k=q->data;                          //交换的是值data  
            q->data=m->data;
            m->data=k;
    }
    return 0;
}


int nizhi(Linklist &L)
{
    Linklist p,Q,k;
    Q=(Linklist)malloc(sizeof(LNode));           //创建头节点
    Q->next=NULL;
    p=L->next;
        for(p;p;p=p->next)
    {
        k=(Linklist)malloc(sizeof(LNode));
        k->data=p->data;
        k->next=Q->next;
        Q->next=k;
    }

    shuchu(Q);
    return 0;

  
}


   


















 
int main()                                //主函数
{
    int i;
    while(1)
    {
        printf("0--退出   1--输入   2--输出    3--查找    4--插入   5--删除   6--计数   7--排序\n8--逆置\n");
        printf("请输入你的选择\n");
      
        scanf("%d",&i);
        switch(i)
        {
            case 0:exit(0);break;
            case 1:shuru(L);break;
            case 2:shuchu(L);break;
            case 3:chazhao(L);break;
            case 4:charu(L);break;
            case 5:shanchu(L);break;
            case 6:jishu(L);break;
            case 7:paixu(L);break;
            case 8:nizhi(L);break;
      
        }

    }

    return 0;

}
搜索更多相关主题的帖子: 元素 
2014-06-19 19:21
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:20 
链表实现在数据结构课程里有,很多现成的代码,自己下载一个研究一下吧

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2014-06-19 21:01
快速回复:明天交作业 链表的删除子函数 能正确输出结果就是这个地方运行完之 ...
数据加载中...
 
   



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

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