数据结构用C语言编成

来源:百度知道 编辑:UC知道 时间:2024/05/22 20:22:40
要求:1.建立一个带头节点的单链表节点的数据类型为int(data)输入非负整数。(用-1为结束标志)长度大于等于10.
2.在单链的第i个节点前插入一个值为X的新节点,i,x用实参调用,插入前后都有一遍输出,每个算法写成函数,用主函数调用,一个主函数,三个用户函数(插入,输入,输出)建立链表.
如果那位高手会希望在22号晚上之前给予答案.谢谢!!!
请提供运行成功的程序.我这有两个程序.
1.是用尾插法建立带头节点的单链表程序
LinkList CreateListR(void)
{char ch;
LinkList head=(LinkList)malloc(sizeof(ListNode));
ListNode*s,*r;
r=head;
while((ch=getchar())!=’\ n')
{s=(ListNode*)malloc(sizeof(ListNode));
s->data=ch;
r->next=s;
r=s;
}
r->next=NULL;
return head;
}

2.插入运算
void InsertList(LinkList head,DataType x,int i)
{ListNode *p,*s;
p=GetNode(head,i-1);
if(p==NULL)
Error("position error");
s=(ListNode *)malloc(sizeof(ListNode));
s->data=x;
s->nextp=p->next;
p->next=s;
}

请结合以上两个程序和提出的两个要求给出答案.谢谢!!!(如果可以的话希望在程序后有些注解)
你好很感谢你的答案,但我运行总是把5插入到链表的第2位我想输入任意的值和在任意的位置上。而且我说的插入前后都有一遍输出怎样实现。我明天就考试了。

首先申明,我这肯定是运行成功的程序,否则我不会贴出来
可能是因为你没有引用相应的头文件
头文件我这里是没写

根据你的程序修改后:
#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;
}