主题:求使用尾插法,生成一个升序链表
zcxpk
[专家分:0] 发布于 2008-05-04 21:25:00
(1)使用尾插法,生成一个升序链表;(2)在上述链表中插入一个元素,使得链表依然升序;(3)在上述链表中查询是否存在元素X,如果存在则将其删除。 最好能都做完 本人菜鸟求高手做下 谢谢
回复列表 (共4个回复)
沙发
lin1270 [专家分:60] 发布于 2008-05-05 18:16:00
typedef int T;
typedef struct Node
{
T data;
struct Node *next;
}Node,*LinkList;
void f(LinkList &L)//算法
{
L=(LinkList)malloc(sizeof(Node));
L->next=NUll;
L->data=0;
LinkList p=L;
T d;
int n=0;
printf("请输入一个元素(-1 to end):");
while(scanf("%d",&d)&&d!=-1)
{
LinkList q=(LinkList)malloc(sizeof(Node));
q->data=d;
if(n==0){
q->next=p;
p->next=q;
n++;
printf("请输入一个元素(-1 to end):");
continue;
}
while(p->data<d)
{p=p->next;}
if(p-data==d)
{printf("你已经输入这个元素了!请重新输入!");continue;}
q->next=p->next;
p->next=q;
p=L;//把L赋给p,以便当输入元素时,从第1个节点开始比较
printf("请输入一个元素(-1 to end):");
}
}
板凳
lin1270 [专家分:60] 发布于 2008-05-05 18:17:00
插入的差不多```就比较```
while(p->data<d)
{p=p->next;}
if(p-data==d)
{printf("你已经输入这个元素了!请重新输入!");continue;}
q->next=p->next;
p->next=q;
3 楼
天之痕99 [专家分:40] 发布于 2008-05-06 10:48:00
LinkList q=(LinkList)malloc(sizeof(Node));
q->data=d;
应该放在
{printf("你已经输入这个元素了!请重新输入!");continue;}
之后,不然会有内存泄漏。
另外我不明白尾插法构造升序链表是怎么回事,原来的数据已经排好序了吗?1楼的朋友构造环形链表似乎和题意有所违背。
4 楼
lin1270 [专家分:60] 发布于 2008-06-20 02:48:00
这个并没有环`~~我的算法是:输入一个数,,比较链表中的元素,,找到一个比它大的数,这个把它插入到这个数之前~~
我建了一个数据结构群:[color=800000]群号: 40715759[/color]
欢迎加入
我来回复