| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 729 人关注过本帖
标题:C语言入门问题
只看楼主 加入收藏
xiaoyu881212
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-3-17
收藏
 问题点数:0 回复次数:6 
C语言入门问题
(1)初始化线性表 initial_List(L)——建立线性表的初始结构,即建空表。这也是各种结构都可能要用的运算。
(2)求表长度 List_length(L)——即求表中的元素个数。
(3)按序号取元素 get_element(L,i)——取出表中序号为i的元素 。
(4)按值查询 List_locate(L,x)——取出指定值为x的元素,若存在该元素,则返回其地址;否则,返回一个能指示其不存在的地址值或标记。
(5)插入元素 List_insert(L,i,x)——在表L的第i个位置上插入值为x的元素。显然,若表中的元素个数为n,则插入序号i应满足1<=i<=n+1。
(6)删除元素 List_delete(L,i)——删除表L中序号为i的元素,显然,待删除元素的序号应满足1<=i<=n。

在一个程序中实现。可不可以给完整的代码啊。。
搜索更多相关主题的帖子: C语言 入门 
2008-03-17 20:44
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
收藏
得分:0 
这也是入门问题?不会.
2008-03-17 20:49
yuki
Rank: 2
等 级:新手上路
威 望:5
帖 子:508
专家分:0
注 册:2005-2-4
收藏
得分:0 
对于单纯的求程序我不给予任何答复,请楼主动动脑筋吧!我有很多链表的代码,但是我觉得我给纯粹的给你是在还你,如果仅仅为了较差,我想楼主找错门路了。

若真的有问题需要询问,欢迎发消息给我,但是有一点注意,本人不替别人写作业。

我们都在命运湖上荡舟划桨,波浪起伏使我们无法逃离孤行;如果我们迷失方向,波浪将指引我们穿过另一天曙光
2008-03-17 21:26
Ethip
Rank: 5Rank: 5
等 级:贵宾
威 望:15
帖 子:771
专家分:0
注 册:2008-1-18
收藏
得分:0 
回复 1# 的帖子
我手头上没有C的链表的source,但Java的倒有,要吗??
2008-03-17 22:35
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 
这个是数据结构的吧``我以前只是看过``但是没有练习过``

所以到底怎么实现``我也不清楚```但是应该不是很难吧``

LZ再看看书```书上有关有很仔细的介绍

女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2008-03-18 00:28
小烟
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2008-3-18
收藏
得分:0 
楼主学的是编程吗??我们怎么没学哪个啊!可能你的那些不是重点
2008-03-18 00:35
hoodlum1980
Rank: 2
来 自:浙江大学
等 级:论坛游民
威 望:2
帖 子:289
专家分:23
注 册:2008-2-24
收藏
得分:0 
本来你的问题我是不会回答的,因为你问的是数据结构中最基础的一种结构:线性表。随便找什么书都有相关讲解。但是既然你专门发短信息给我。我就简单回复下。
首先一个,线性表根据存储方式基本分两种,一种是顺序存储结构,即数组的方式,随机访问方便,插入,搜索都是线性时间(对于无序数据),缺点是不适合动态存取,插入删除时还需要移动其他元素。另一种是链表,链表根据其遍历方向,有可以分为单向链接表和双向链接表,链表的优点是插入删除节点比较方便,适合动态存取,缺点是指针要占用额外空间,随机访问不方便。

从你的题目也没说要求哪一种。我就默认按你的题目指的是单向链表。

以下代码尚未经过调试和测试和检验,不敢保证正确。
(0)先定义节点的数据结构:
typedef struct node
{
    int data;
    struct node *next; //指向下一个节点的指针
} NODE;

(1)建立链表需要一个头指针
NODE *head=NULL;
节点都是动态分配内存的,所以也不需要什么额外操作,一个空链表,其head=NULL;这里创建链表是指用户录入数据的过程:返回表头指针:
NODE* initial_List()
{
    NODE *head,p;
    int n,i=0;
    char c;
    head=NULL;
    printf("input datas:\n");
    while(scanf("%d",&n)>0)
    {
        List_insert(&head,i++,n);
    }
    do{scanf("%c",&c);}while(c!='\n');
    return head;
}
(2)求元素个数:需要遍历一下链表
int List_length(NODE *head)
{
    NODE *p=head;
    int length=0;
    while(p)
    {
        p=p->next;
        length++;
    }
    return length;
}

(3)按序号取元素 get_element(L,i)——取出表中序号为i的元素 。
NODE* get_element(NODE *head,int i)
{
   NODE *p=head;
   int t=0;
   if(i<0)
        return NULL;
   while(p && t++<i)
   {
        p=p->next;
    }
    return p;
}

(4)按值查询 List_locate(L,x)——取出指定值为x的元素,若存在该元素,则返回其地址;否则,返回一个能指示其不存在的地址值或标记。
NODE* List_locate(NODE *head,int x)
{
    NODE *p=head;
    while(p)
    {
        if(p->data == x) /* 是否已经找到了节点,找到了则返回节点指针 */
           return p;
        p=p->next;
    }
    return NULL;
}

(5)插入元素 List_insert(L,i,x)——在表L的第i个位置上插入值为x的元素。显然,若表中的元素个数为n,则插入序号i应满足1<=i<=n+1。
*********注意,这里一律使用0为base的索引值。和你的题目要求都是1为base有不同!.***********
注意,这个操作和前面不同的是,它可能影响表头的地址,所以我们需要传入的是表头指针head的指针,这样我们才能在函数中修改表头地址。
返回值表示该节点成为表中第几个节点,返回1表示插入头部,返回0表示失败。
int List_insert(NODE **head,int i,int x)
{
    NODE *p, *u=(NODE*)malloc(sizeof(NODE));
    u->data=x;
    if(i<0)
       return 0;
    if(i==0)   /*在表头插入节点*/
    {
        u->next=*head;
        *head=u;          /*更新头指针*/
        return 1;
     }
     else
     {
         p=get_element(*head,i-1);  /* 取到i-1节点,插到i-1节点后面*/
         if(p)
         {
             u->next=p->next;
             p->next=u;
             return i+1;
          }
         else
         {
             free(u);
             return 0;  /*插入失败*/
         }
     }
}

(6)删除元素 List_delete(L,i)——删除表L中序号为i的元素,显然,待删除元素的序号应满足1<=i<=n。(注意改为索引0~n-1,因为看这种表示法不爽!)
注意这里可能删除表头,所以还是要传表头指针的指针。
int List_delete(NODE **head,int i)
{
   NODE *p,*q=*head;
   if(i<0 || q==NULL)  /*链表如果已经是空的,则返回失败*/
     return 0;
   if(i==0) /*删除表头*/
   {
       *head=q->next;
       free(q);        /*删除表头*/
       return 1;
   }
   else
   {
        p=get_element(*head,i-1);
        if(!p)
          return 0;   /*删除失败,返回0*/
        else
        {
            q=p->next;
            if(!p)
                return 0;    /*删除失败*/
             else
             {
                p->next = q->next;
                free(q);          /*释放相应节点*/
                return 1;         /*删除成功*/
             }

         }
    }
}
2008-03-18 02:31
快速回复:C语言入门问题
数据加载中...
 
   



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

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