首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

初学者提问 有关链表的有关问题 泪流满面呀 已经头脑混乱了

2012-02-06 
菜鸟提问 有关链表的问题 泪流满面呀 已经头脑混乱了C/C++ code#includeiostreamusing namespace std#d

菜鸟提问 有关链表的问题 泪流满面呀 已经头脑混乱了

C/C++ code
#include  <iostream> 
using namespace std;
#define MAXSIZE 1024
typedef int DataType;
typedef struct node
{
    DataType data;
    struct node *next; 
} LNode,*LinkList;

LinkList  Creat_LinkList1()
{LinkList L=NULL;/*空表*/
LNode *s;
int x, flag =-1;      /*设数据元素的类型为int*/
L=(LinkList)malloc(sizeof(LNode));    /*建立头结点*/
L->data= flag;   
L->next =NULL;  /*用-1表示头结点*/
scanf("%d",&x);
while (x!=flag)
  { s=(LinkList)malloc(sizeof(LNode));
      s->data=x;
          s->next=L->next; 
          L->next =s;
          scanf("%d",&x);
  }
  return L;
}


LNode *Get_LinkList(LinkList L,int i)
{
  LNode  *p=L;
      int  j=0;
      while (p->next !=NULL && j <i )
      {  p=p->next; 
          j++; 
      }
      if (j==i)  return p;
      else        return NULL;
}

int  Insert_LinkList(LinkList L,int i,DataType x)
{ LNode  *p,*s;    p=Get_LinkList(L,i-1);  /*查找第i-1个结点*/
    if (p==NULL)
        { printf("参数i错"); return 0;
        } /*第i-1个不存在*/
    else
      { 
          s=(LinkList)malloc(sizeof(LNode)); /*申请结点*/
          s->data=x;
          s->next=p->next; /*新结点插入在第i-1个结点后*/
          p->next=s;
        return 1;
      }
}

int  Del_LinkList(LinkList L,int i)
{  LinkList  p,s;    p=Get_LinkList(L,i-1);  /*查找第i-1个结点*/
    if (p==NULL)
        { printf("第i-1个结点不存在");return -1; }
    else
      {  if (p->next==NULL)
            { printf("第i个结点不存在");return 0; }
          else
              {
              s=p->next;  /*s指向第i个结点*/
              p->next=s->next;      /*从链表中删除*/
              free(s);              /*释放*s */
              return 1;
              }
        }}

void main()
{
int i,y=2048;
LinkList L;
Creat_LinkList1();
    printf("请输入要加入的结点i 的值:");
scanf ("%d",&i);
Insert_LinkList(L,i,y);
printf("请输入要删除的结点i 的值:");
scanf ("%d",&i);
Del_LinkList(L,i);
}


[解决办法]
这个可以用了
C/C++ code
#include <iostream>using namespace std;#define MAXSIZE 1024typedef int DataType;typedef struct node {      DataType data;     struct node *next;  } LNode,*LinkList;LinkList  Creat_LinkList1() {    LinkList L=NULL;/*空表*/    LNode *s;    int x, flag =-1;       /*设数据元素的类型为int*/    L=(LinkList)malloc(sizeof(LNode));     /*建立头结点*/     L->data= flag;         L->next =NULL;  /*用-1表示头结点*/    printf("请输入节点的值,以-1结束:");    scanf("%d",&x);    while (x!=flag)    {            s=(LinkList)malloc(sizeof(LNode));        s->data=x;        s->next=L->next;          L->next =s;        scanf("%d",&x);   }   return L;}LinkList Get_LinkList(LinkList L,int i){      LNode  *p=L;      int  j=0;      while (p->next!=NULL&&j<i )       {            p=p->next;            j++;         }      if (j==i)           return p;      else                 return NULL;}int  Insert_LinkList(LinkList L,int i,DataType x){     LNode  *p,*s;      p=Get_LinkList(L,i-1);   /*查找第i-1个结点*/    if (p==NULL)     {         printf("参数i错"); return 0;     } /*第i-1个不存在*/    else     {          s=(LinkList)malloc(sizeof(LNode)); /*申请结点*/        s->data=x;         s->next=p->next; /*新结点插入在第i-1个结点后*/        p->next=s;        printf("插入完毕!\n");        return 1;    }}int  Del_LinkList(LinkList L,int i){      LinkList  p,s;       p=Get_LinkList(L,i-1);   /*查找第i-1个结点*/    if (p==NULL)     {        printf("第i-1个结点不存在");        return -1;     }    else        {          if (p->next==NULL)        {            printf("第i个结点不存在");            return 0;         }        else        {             s=p->next;  /*s指向第i个结点*/            p->next=s->next;       /*从链表中删除*/            free(s);               /*释放*s */            printf("删除完毕!\n");            return 1;        }        }}void main(){    int i,y=2048;    LinkList L;        L=Creat_LinkList1();    printf("请输入要加入的结点i 的值:");    scanf ("%d",&i);    Insert_LinkList(L,i,y);    printf("请输入要删除的结点i 的值:");    scanf ("%d",&i);    Del_LinkList(L,i);} 

热点排行