问题描述:
要求:1.建立一个带头节点的单链表节点的数据类型为int(data)输入非负整数。(用-1为结束标志)长度大于等于10.
2.在单链的第i个节点前插入一个值为X的新节点,i,x用实参调用,插入前后都有一遍输出,每个算法写成函数,用主函数调用,一个主函数,三个用户函数(插入,输入,输出)建立链表.
如果那位高手会希望在22号晚上之前给予答案.谢谢!!!
解析:
首先申明,我这肯定是运行成功的程序,否则我不会贴出来
可能是因为你没有引用相应的头文件
头文件我这里是没写
根据你的程序修改后:
#include <iostream>vs就用这个库
#include <stdlib.h>vc用这两个
#include <stdio.h>
#define NULL 0
typedef struct list
{
int data
struct list* next
}ListNode
ListNode* CreateList(void)
{
int data
ListNode* head=(ListNode*)malloc(sizeof(ListNode))
ListNode *s,*r
r=head
scanf("%d",&data)
while(data!=-1)直到输入-1为止,一直循环
{
s=(ListNode*)malloc(sizeof(ListNode))
s->data=data
r->next=s
r=s
scanf("%d",&data)
}
r->next=NULL
return head
}
ListNode* GetNode(ListNode* head,int i)找到i之前的node,用来插入
{
int count=0
ListNode* p=head
while(p!=NULL)
{
if(count==i)
return p
count++
p=p->next
}
return NULL
}
void InsertList(ListNode* head,int x,int i)
{
ListNode *p,*s
p=GetNode(head,i-1)
if(p==NULL)
{
printf("position error\n")
return
}
s=(ListNode*)malloc(sizeof(ListNode))
s->data=x
s->next=p->next
p->next=s
}
void PrintList(ListNode* head)
{
ListNode* p1=head->next
while(p1!=NULL)
{
printf("%d->",p1->data)
p1=p1->next
}
printf("NULL")
}
int main()
{
ListNode* head = CreateList()
InsertList(head,5,2)
PrintList(head)
return 0
}
原程序:
#define NULL 0
struct link
{
int data
struct link* next
}
void input(struct link* head)
{
int data
struct link* p1=head
struct link* p
scanf("%d",&data)
while(data!=-1)
{
p = (struct link*)(malloc)(sizeof(struct link))
p->data=data
p->next=NULL
p1->next=p
p1=p
scanf("%d",&data)
}
}
void print(struct link* head)
{
struct link* p1=head->next
while(p1!=NULL)
{
printf("%d->",p1->data)
p1=p1->next
}
printf("NULL")
}
void insert(struct link* head,int i,int data)
{
struct link* p1=head
struct link* p
int count=0
while(p1!=NULL&&count<=i-1)
{
if(count==i-1)
{
p = (struct link*)(malloc)(sizeof(struct link))
p->data=data
p->next=p1->next
p1->next=p
return
}
p1=p1->next
count++
}
}
int main()
{
struct link* head = (struct link*)(malloc)(sizeof(struct link))
head->data=0
head->next=NULL
input(head)
insert(head,1,5)
print(head)
return 0
#include"stdio.h"
#include
"malloc.h"
#define
null
0
struct
node
/*定义结构体*/
{int
data
struct
node
*next
}
struct
node
*head
struct
node
*p
struct
node
*s
void
creat()
/*创建单链表*/
{int
ch
head=(struct
node
*)malloc(sizeof(struct
node))
head->next=null
p=head
printf("请输入数据:
")
scanf("%d",&ch)
while(ch!=-1)
{s=(struct
node
*)malloc(sizeof(struct
node))
s->data=ch
s->next=null
p->next=s
p=s
printf("请输入数据:
")
scanf("%d",&ch)
}
}
void
outline()
/*输出单链表*/
{p=head->next
while(p!=null)
{printf("%d
",p->data)
p=p->next
}
printf("\n")
}
int
locate(int
x)
/*按值查找*/
{p=head->next
while((p!=null)&&(p->data!=x))
p=p->next
if(p==null)
return
0
else
return
(p->data)
}
main()
/*主函数*/
{int
a=0
creat()
outline()
printf("请输入你要找的数:\n")
scanf("%d",&a)
printf("你要找的数的下标是:
%d\n",locate(a))
printf("结点个数是:
%d\n",countnode())
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)