数据结构的题目!!求大神!!!
题目:已知带头结点的动态单链表L中的结点是按整数值递增排列的,试写一算法将值为X的结点插入表L中,使L任有序。下面是我写的程序,有错,我不会改了求大神帮忙!求解释!!!#...
题目:已知带头结点的动态单链表L中的结点是按整数值递增排列的,试写一算法将值为X的结点插入表L中,使L任有序。
下面是我写的程序,有错,我不会改了 求大神帮忙!求解释!!!
#include "stdio.h"
#include "malloc.h"
#include "stdlib.h"
//描述单链表
typedef int datatype
typedef struct node
{datatype data;
struct node *next;
}linklist;
//用尾插法创建单链表
void creatlistr(*q)
{char ch;
linklist *head,*s,*r;
*head=NULL;
ch=getchar();
while(ch!="$")
{s=malloc(sizeof(linklist));
s->data=ch;
if(head==NULL)
head=s;
else
r->next=s;
r=s;
ch=getchar();
}
}
//输出
void list(linklist *q)
{linklist *p;
p=q->next;
whlie(p!=NULL)
{printf("%d",p);
p=p->next;
}
}
//比较插入的关键语句
void insert(linklist *head,int x)
{linklist *p;
p=head;
while(1){
if(p==head)
if(p->next->data>x)
break;
else
p=p->next;
else
if(p->next==NULL)
break;
else
p=p->next;
}
linklist *q=malloc(sizeof(linklist))
q->data=x;
q->next=p->next;
p->next=q;
}
//主函数
void main()
{linklist *x;
printf("输入一个单链表");
creatlistr(x);
printf("插入一个数a");
insert(x,5);
list(x);
} 展开
下面是我写的程序,有错,我不会改了 求大神帮忙!求解释!!!
#include "stdio.h"
#include "malloc.h"
#include "stdlib.h"
//描述单链表
typedef int datatype
typedef struct node
{datatype data;
struct node *next;
}linklist;
//用尾插法创建单链表
void creatlistr(*q)
{char ch;
linklist *head,*s,*r;
*head=NULL;
ch=getchar();
while(ch!="$")
{s=malloc(sizeof(linklist));
s->data=ch;
if(head==NULL)
head=s;
else
r->next=s;
r=s;
ch=getchar();
}
}
//输出
void list(linklist *q)
{linklist *p;
p=q->next;
whlie(p!=NULL)
{printf("%d",p);
p=p->next;
}
}
//比较插入的关键语句
void insert(linklist *head,int x)
{linklist *p;
p=head;
while(1){
if(p==head)
if(p->next->data>x)
break;
else
p=p->next;
else
if(p->next==NULL)
break;
else
p=p->next;
}
linklist *q=malloc(sizeof(linklist))
q->data=x;
q->next=p->next;
p->next=q;
}
//主函数
void main()
{linklist *x;
printf("输入一个单链表");
creatlistr(x);
printf("插入一个数a");
insert(x,5);
list(x);
} 展开
展开全部
你的定义就有点问题,我给你一个链表基本操作的程序代码吧,希望对你有所帮助
#include <stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode;
typedef LNode *LinkList;
//****************************************************************************
LinkList CreateList()//头插入法 建立带头节点的链表
{
LinkList L;
LinkList P;
int x;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;//建立空链表
printf("请输入第一个元素并以0作为输入结束的标志\n");
scanf("%d",&x);
while(x!=0)//以输入0作为输入结束标志
{
P=(LinkList)malloc(sizeof(LNode));
P->data=x;
P->next=L->next;
L->next=P;
scanf("%d",&x);
}
return L;
}
int Listlength_L(LinkList L)//求表长
{
LinkList P;
P=L;
int i=0;
while(P->next!=NULL){i++;P=P->next;}
return i;
}
LinkList Get_LinkList(LinkList L,int i)//按序号查找
{
LinkList P=L;
int j=0;
while(j<i&&P->next!=NULL)
{j++;P=P->next;}
if(i==j)return P;
else return NULL;
}
LinkList Locate_LinkList(LinkList L,ElemType e)//按值查找
{
LinkList P=L;
while(P->next!=NULL&&P->data!=e)P=P->next;
return P;
}
LinkList ListInsert1(LinkList L,int i,ElemType e)//在第i个节点前插入新元素e
{
int j=0;
LinkList p,s;
s=(LinkList)malloc(sizeof(LinkList));//切记 一定要为s分配内存
s->data=e;
p=L;
while(p!=NULL&&j<i-1){j++;p=p->next;}
//if(p==NULL||j>i+1){printf("参数i有误");exit(1);}
s->next=p->next;
p->next=s;
return L;
}
LinkList ListInsert2(LinkList L,int i,ElemType e)//在第i个节点后插入新元素e
{
int j;
LinkList p,s;
s=(LinkList)malloc(sizeof(LinkList));
s->data=e;
p=L->next;
if(i==0)
{
s->next=L->next;L->next=s;
}
else
{
for(j=0;j<i-1;j++)p=p->next;
if(p==NULL||j>i+1){printf("参数i有误");exit(1);}
s->next=p->next;
p->next=s;
}
return L;
}
LinkList ListDelete(LinkList L,int i,ElemType e)//删除第i个节点,把删除的值放在e中
{
int j;
LinkList p;
p=L;
for(j=0;j<i-1;j++)p=p->next;
if(p==NULL||j>=i){printf("参数i有误");exit(1);}
e=p->next->data;
p->next=p->next->next;
return L;
}
void display(LinkList L)//遍历链表L
{
LinkList p;
p=L->next;
while(p){printf("%d ->",p->data);p=p->next;}
printf("\b\b \n");
}
int main()
{
}
#include <stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode;
typedef LNode *LinkList;
//****************************************************************************
LinkList CreateList()//头插入法 建立带头节点的链表
{
LinkList L;
LinkList P;
int x;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;//建立空链表
printf("请输入第一个元素并以0作为输入结束的标志\n");
scanf("%d",&x);
while(x!=0)//以输入0作为输入结束标志
{
P=(LinkList)malloc(sizeof(LNode));
P->data=x;
P->next=L->next;
L->next=P;
scanf("%d",&x);
}
return L;
}
int Listlength_L(LinkList L)//求表长
{
LinkList P;
P=L;
int i=0;
while(P->next!=NULL){i++;P=P->next;}
return i;
}
LinkList Get_LinkList(LinkList L,int i)//按序号查找
{
LinkList P=L;
int j=0;
while(j<i&&P->next!=NULL)
{j++;P=P->next;}
if(i==j)return P;
else return NULL;
}
LinkList Locate_LinkList(LinkList L,ElemType e)//按值查找
{
LinkList P=L;
while(P->next!=NULL&&P->data!=e)P=P->next;
return P;
}
LinkList ListInsert1(LinkList L,int i,ElemType e)//在第i个节点前插入新元素e
{
int j=0;
LinkList p,s;
s=(LinkList)malloc(sizeof(LinkList));//切记 一定要为s分配内存
s->data=e;
p=L;
while(p!=NULL&&j<i-1){j++;p=p->next;}
//if(p==NULL||j>i+1){printf("参数i有误");exit(1);}
s->next=p->next;
p->next=s;
return L;
}
LinkList ListInsert2(LinkList L,int i,ElemType e)//在第i个节点后插入新元素e
{
int j;
LinkList p,s;
s=(LinkList)malloc(sizeof(LinkList));
s->data=e;
p=L->next;
if(i==0)
{
s->next=L->next;L->next=s;
}
else
{
for(j=0;j<i-1;j++)p=p->next;
if(p==NULL||j>i+1){printf("参数i有误");exit(1);}
s->next=p->next;
p->next=s;
}
return L;
}
LinkList ListDelete(LinkList L,int i,ElemType e)//删除第i个节点,把删除的值放在e中
{
int j;
LinkList p;
p=L;
for(j=0;j<i-1;j++)p=p->next;
if(p==NULL||j>=i){printf("参数i有误");exit(1);}
e=p->next->data;
p->next=p->next->next;
return L;
}
void display(LinkList L)//遍历链表L
{
LinkList p;
p=L->next;
while(p){printf("%d ->",p->data);p=p->next;}
printf("\b\b \n");
}
int main()
{
}
追问
不对啊 不可以运行....还有我那个怎么那么多错啊...帮帮忙
追答
这些代码在我的机器都是运行过的,没有任何问题。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询