回 帖 发 新 帖 刷新版面

主题:链表的几个基本操作,得不到想要的值,大家帮忙改改

#include<stdio.h>
#include<malloc.h>
#include<string.h>
typedef struct node
{
    int date;
    struct node *next;
}Snode;
void Creat(Snode *p,int n)/*创一个链表,并赋值。*/
{
    int i;
p=(Snode*)malloc(sizeof(Snode));
p->next=NULL;
for(i=0;i<n;i++)
    {
     scanf("%d",&p->date);
    }
}
int getlength(Snode *p)/*求长度*/
{
    Snode *q;
    int a=0;
    q=p->next;
    while(q!=NULL)
    {  a++;
      q=q->next;
    }
       return a;
}
Snode *get(Snode *p,int i)/*取第I个元素的地址*/
{
int j=0;
Snode *q=p->next;
while(q!=NULL&&j<i)
{
  p=p->next;
  j++;
}
if(q!=NULL)
     {
      return q;
     }
else
    {
     cout <<"您输入的I是错误的"<<end1;
     return NULL;
    }
}
void insnode(Snode *p,int k,int a)/*在第K位插入a*/
{
Snode *q,*s;
s=(Snode*)malloc(sizeof(Snode));
s->date=a;
if(k==0)
    {
     s->next=p->next;
      p->next=s;
    }
else{
  q=get(p,k-1);
  if(q!=NULL)
   {
     s->next=q->next;
     q->next=s;
    }
    else
    {
    return 0;
    }
  }
   return 1;
}
void delnode(Snode *p,int b)/*删除第b位的元素*/
{
Snode *q,*t;
if(b==0)
{
   t=p->next;
   p->next=t->next;
   free(t);
}
  else
  {
    q=get(p,b-1);
    if(q==NULL)
     return 0;
     else
     {
        t=q->next;
        q->next=t->next;
        free(t);
     }
  }
  return 1 ;
}
void print(Snode *p)/*输出链表*/
{
    Snode *q=p->next;
    int i;
for(i=0;i<getlength(p);i++)
    {
     printf("%d",p->date);
    }
}
main()/*这当然是主函数了*/ 
{
Snode *p;
int a=6;
  Creat(&p,a);
  insnode(&p,4,7);
   delnode(&p,4);
   println(&p);
}
大家帮帮忙,有几个错误不会改

回复列表 (共1个回复)

沙发

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct node
{
    int date;
    struct node *next;
}Snode;
void Creat(Snode *p,int n)/*创一个链表,并赋值。*/
{
    int i;
p=(Snode*)malloc(sizeof(Snode));
p->next=NULL;
for(i=0;i<n;i++)
    {
     scanf("%d",&p->date);
    }
}
int getlength(Snode *p)/*求长度*/
{
    Snode *q;
    int a=0;
    q=p->next;
    while(q!=NULL)
    {  a++;
      q=q->next;
    }
       return a;
}
Snode *get(Snode *p,int i)/*取第I个元素的地址*/
{
int j=0;
Snode *q=p->next;
while(q!=NULL&&j<i)
{
  p=p->next;
  j++;
}
if(q!=NULL)
     {
      return q;
     }
else
    {
     return NULL;
    }
}
void insnode(Snode *p,int k,int a)/*在第K位插入a*/
{
Snode *q,*s;
s=(Snode*)malloc(sizeof(Snode));
s->date=a;
if(k==0)
    {
     s->next=p->next;
      p->next=s;
    }
else{
  q=get(p,k-1);
  if(q!=NULL)
   {
     s->next=q->next;
     q->next=s;
    }
    else
    {
    printf("\n");
    }
  }
   printf("\n");
}
void delnode(Snode *p,int b)/*删除第b位的元素*/
{
Snode *q,*t;
if(b==0)
{
   t=p->next;
   p->next=t->next;
   free(t);
}
  else
  {
    q=get(p,b-1);
    if(q==NULL)
     printf("\n");
     else
     {
        t=q->next;
        q->next=t->next;
        free(t);
     }
  }
  printf("\n");
}
void print(Snode *p)/*输出链表*/
{
    int i;
for(i=0;i<getlength(p);i++)
    {
     printf("%d\n",p->date);
    }
    printf("\n");
}
main()/*这当然是主函数了*/
{
Snode p;
  Creat(&p,6);
  insnode(&p,4,7);
   delnode(&p,4);
   print(&p);
}
我改了一下,但是还是不能得到答案,不知道为什么,大家帮帮忙

我来回复

您尚未登录,请登录后再回复。点此登录或注册