数据结构习题!!!!帮我用C语言写一个删除操作的算法!按照图中相关代码写!最好运行成功后再发给我!

数据结构习题!!!!帮我用C语言写一个删除操作的算法!按照图中相关代码写!最好运行成功后再发给我!谢谢!

第1个回答  推荐于2016-03-15
#include <stdlib.h>
#include<stdio.h>
#define NEW (LB *)malloc(sizeof(LB))
typedef struct Lianb{

int data;

struct Lianb *next;

}LB;// 创建链表结构体

LB *chuangjian(int n)

{

LB *Head,*p;

Head=p=NEW;

for(int i=0;i<n;i++){

scanf("%d",&p->data);

p->next=NEW;

p=p->next;

}

p=0;

return Head;

}// 创建链表

void xianshi(LB *Head,int n)

{

printf("head->");

LB *p=Head;

for(int i=0;i<n;i++){

printf("%d->",p->data);

p=p->next;

} printf("end\n");

}// 显示链表

LB *chazhao(LB *Head,int n){

LB *p=Head;

if(p!=0){for(int i=0;i<n-1;i++){

p=p->next;

}

}else{

printf("链表长度不足\n");

}

return p;

}// 查找

LB *shanchu(LB *Head, int n){

LB *p=chazhao(Head,n-1);

p->next = p->next->next;

return Head;

}// 删除
int main()
{
LB *head;

head=chuangjian(5);// 创建链表

xianshi(head,5);// 显示链表
shanchu(head, 3);

xianshi(head, 4);//显示插入后新链表

free(head);

return 0;

}追问

我运行成功了吗?

你运行成功了吗?

追答

xianshi(head, 4);//显示插入后新链表  //插入改为删除

追问

跟书本的代码不太一样哎

还在吗?看得到我发的图片吗

追答

一开始发的吗 看得到

追问

那你看的清楚的话为何不用图中关键代码~老师说不跟书本一样不算数~……你写的是正确的但是跟我想要的代码不一样

追答

给我点时间改改

追问

嗯!谢谢~最好快点哦哦~我要交了

追答

#include
#include
#define NEW (LB *)malloc(sizeof(LB))
#define ERROR 0

#define OK L

#define ElemType int
typedef struct Lianb{

int data;

struct Lianb *next;

}LB;// 创建链表结构体

LB *chuangjian(int n)

{

LB *Head,*p;

Head=p=NEW;

for(int i=0;idata);

p->next=NEW;

p=p->next;

}

p=0;

return Head;

}// 创建链表

void xianshi(LB *Head,int n)

{

printf("head->");

LB *p=Head;

for(int i=0;i",p->data);

p=p->next;

} printf("end\n");

}// 显示链表

LB *shanchu(LB *L, int i, ElemType *e){

LB *p, *r;

int k = 0;

p = L;

while (p->next != NULL && k next;

k += 1;

}

if (k != i - 1) {

printf("删除节点的位置不合理!");

return ERROR;

}

r = p->next;

p->next = p->next->next;

e = &r->data;

free(r);

return OK;

}// 删除
int main()
{
LB *head;

head=chuangjian(5);// 创建链表

xianshi(head,5);// 显示链表

int *e = 0;

shanchu(head, 3, e);

xianshi(head, 4);
free(head);

return 0;

}

追问

你运行过了吗

追答

嗯嗯 刚才不行我又改了下现在好了

追问

???那第二个代码可以成功运行?

追答

是啊

追问

还有空吗~有空的话还可以帮写一个串插入函数吗~没空的话我就算了我就直接采纳你了~

追答

我有插入代码但是不是又要用你书本上的。。。

追问

对啊~要用书上的~否则无效~老师要求的~你没空的话就不麻烦你了~有空的话我就发图片给你~反正我一定会采纳你的放心吧

追答

你把图发过来把 我看看容不容易改

追问

追答

这个太烦了。。。
LB *shanchu(LB *L, int i, ElemType *e){
LB *p, *r;
int k = 0;
p = L;
while (p->next != NULL && k next;
k += 1;
}
if (k != i - 1) {
printf("删除节点的位置不合理!");
return ERROR;
}
r = p->next;
p->next = p->next->next;
*e = r->data;//。。。。。。。。。。。。。。改
free(r);
return OK;
}// 删除
int main()
{
LB *head;
head=chuangjian(5);// 创建链表
xianshi(head,5);// 显示链表
int *e = (int *) malloc(sizeof(int));//。。。。。。。。。。。。。改
shanchu(head, 3, e);
xianshi(head, 4);
free(head);
return 0;
}
删除那个我又改了下 更合理了 你可以改改

追问

嗯!我在吃饭~等下看

为什么第二个代码输出的时候是一个黑色的框框~什么都没有

追答

你要输入n个数据的啊 用回车隔开 我那个代码n = 5;
head=chuangjian(5);// 创建链表 括号内为你要几个数据
xianshi(head,5);// 显示链表 括号内数字为链表长度
int *e = (int *) malloc(sizeof(int));//。。。。。。。。。。。。。改
shanchu(head, 3, e);//括号内数字为删节地方
xianshi(head, 4);//括号内数字为删除后链表长度

追问

然而结果不对~……你看看刚刚发的截图

追答

追问

追答

我第二段只发了一部分 你要把前面的也加上的然后把for里面的Int i放到外面
Head=p=NEW;
int i;

for(i=0;i<n;i++){
像这样 有两句
free(e);// .....................最后加一句这个

free(head);

追问

……好吧~我在编辑一下

追答

追达有字数限制不能发全代码了

追问

哦哦~OK~等会

不对啊~要不你复制粘贴发个截图给我~不好意思了

追答

追问

追答

把for里面的int去掉
for(i = 0;i < n;i++)

追问

追答

你仔细核对下 代码一样不可能这样的额 我已经无计可施了T_T

追问

我同学写那个很好哎~很方便……

好吧~谢谢你了~太爱你了学长~~这么耐心的给我写~还搞了这么久~

追答

我这是临时改的 没想那么多

本回答被提问者和网友采纳
相似回答