注册 登录
编程论坛 数据结构与算法

单链表的建立和插入

aKARL 发布于 2013-08-30 09:36, 1152 次点击
有1,2,3,4,5,6,8,9,10,11这10个数升序排列,现再加入7,依旧是升序排列
要求用单链表编写
11 回复
#2
aKARL2013-08-30 09:37
本人一点单链表不会,求救
#3
不玩虚的2013-08-30 19:03
不会吧,你看看书呗!
#4
aKARL2013-09-01 10:13
回复 3楼 不玩虚的
指针就没大弄明白,单链表就更没弄懂了,上次用数组做的还能自己搞定,这次要求用单链表是直接KO
#5
邓士林2013-09-02 23:13
先看看书上的单链表怎么构建的
#6
hkcmd2013-09-02 23:22
/**************************
*1,2,3,4,5,6,8,9,10,11
*加入7
***************************/

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define LEN 10
typedef struct node
{
    int date;
    struct node *next;
}*PNODE;

PNODE create_list(void);
bool charu_list(PNODE,int,int);
void transt_list(PNODE);

int main(void)
{
    PNODE p;
    p=create_list();
    printf("All is:\n");
    transt_list(p);
    printf("\nAll is:\n");
    charu_list(p,7,7);
    transt_list(p);   
    printf("\n");
    return 0;
}
PNODE create_list(void)
{
    int i;
    int a[]={
        1,2,3,4,5,6,8,9,10,11
    };
    PNODE head=(PNODE)malloc(sizeof(node));
    if(NULL==head)
    {
        printf("neicun feipei shibai!");
        exit(-1);
    }
    PNODE tail=head;
    tail->next=NULL;
    for(i=0;i<LEN;i++)
    {
        PNODE pnew=(PNODE)malloc(sizeof(node));
        if(NULL==pnew)
        {
            printf("neicun feipei shibai!");
            exit(1);
        }   
        pnew->date=a[i];   
        tail->next=pnew;   
        pnew->next=NULL;
        tail=pnew;
    }
    return head;
}
bool charu_list(PNODE p,int pos,int value)
{
     int i=0;
     PNODE v=p;
     while(NULL!=v && i<pos-1)
     {
         v=v->next;
         ++i;
     }
     if(i>pos-1 && NULL==v)
        return false;
     PNODE pnod=(PNODE)malloc(sizeof(node));
     if(NULL==pnod)
     {
         printf("feipei neicun shibai!");
         exit(-1);
     }
     pnod->date=value;
     PNODE r=v->next;
     v->next=pnod;
     pnod->next=r;
     return true;
}
void transt_list(PNODE head)
{
     PNODE p=head->next;
     while(NULL!=p)
     {
          printf("%d ",p->date);
         p=p->next;   
      }   
}
#7
hkcmd2013-09-04 23:47
我突然发现我这个程序有error:我真希望有人给我指出来.
#8
qunxingw2013-09-05 13:58
....

[ 本帖最后由 qunxingw 于 2013-9-5 18:40 编辑 ]
#9
hkcmd2013-09-11 19:13
真是太激动了,程序一直的问题无从下手,今天终于找到答案了。
这个一开始就疑惑为什么没有free,不是不用,而是不知道怎么用,然而也没有人告诉我,我就是一个瞎子。


 void transt_list(PNODE head)
 {
      PNODE p=head->next;
      while(NULL!=p)
      {
          printf("%d ",p->date);
          p=p->next;   
      }   
      p=head;
      while(NULL!=p)
      {
          free(p);
          p=p->next;   
      }   
}
这样子,就好多了。
让你等久了,楼主.
得到你的分,真是惭愧!
#10
hkcmd2013-09-11 19:27
我突然觉得还应该加入一个结构体指针变量 s,因为直接用 p 会导致链表首地址发生变化。
void transt_list(PNODE head)
 {
       PNODE s=p;
       PNODE s=head->next;
       while(NULL!=s)
       {
           printf("%d ",s->date);
           s=s->next;   
       }   
       s=head;
       while(NULL!=s)
       {
           free(s);
           s=s->next;   
      }   
 }
#11
aKARL2013-09-12 18:05
回复 9楼 hkcmd
不是我结贴的,应该是管理员,我这几天比较忙没上。。。。。。。。。
#12
hkcmd2013-09-12 21:40
回复 11楼 aKARL
哦,没事,你知道怎么用就行了。
最后我画蛇添足了,不用加s ,因为有了。

1