数据结构习题!!!!帮我用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

追问

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

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

追答

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

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

求C语言大神帮忙,一道数据结构题,删除单链表中最大和次最大的数,感激...
操作结果:若L为空表,则返回TRUE,否则返回FALSE *\/status listIsEmpty (linkList L) {return L->next == NULL;}\/* 单链表指定位置插入新元素 *\/\/* 操作结果:在带头结点的单链表L中第i个位置之前插入元素e *\/status listInsertNode (linkList L, int i, elemType e) {int j=0;linkList...

c语言中怎样编写一个删除程序?
链表保存到文件,删除节点,添加节点。include "stdio.h"include "malloc.h"include \/ 用户数据结构 \/ typedef struct struData { char usertext[100];int userdata1;int userdata2;}ST_DATA,*PST_DATA;\/ 链表结构 \/ typedef struct struLink { ST_DATA userdata;struct struLink pnext;}ST_LINK...

数据结构,c语言~写一个算法:删除整数数组中相同的多余整数(只保留第...
include<stdio.h>int main() {int a[] = {36,25,14,63,36,25,14,36,36};int i,j,k,n = sizeof(a)\/sizeof(a[0]);for(i = 0; i < n; ++i)printf("%d ",a[i]);printf("\\n");for(i = 0; i < n; ++i) {for(j = i + 1; j < n - 1; ++j) {if(a[...

关于数据结构算法,谁能帮我用C语言写下?谢谢
typedef struct \/* 队列的链表结构 *\/ { QueuePtr front,rear; \/* 队头、队尾指针 *\/ }LinkQueue;Status visit(QElemType c){ printf("%d ",c);return OK;} \/* 构造一个空队列Q *\/ Status InitQueue(LinkQueue *Q){ Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode));if(!Q-...

关于数据结构的问题,用C语言描述
1.栈、队列的定义及其相关数据结构的概念,包括:顺序栈,链栈,共享栈,循环队列,链队等。栈与队列存取数据(请注意包括:存和取两部分)的特点。2.递归算法。栈与递归的关系,以及借助栈将递归转向于非递归的经典算法:n!阶乘问题,fib数列问题,hanoi问题,背包问题,二叉树的递归和非递归遍历问题,图的深度遍历与栈的...

数据结构作业~急求~~~用c语言或c++ 使用单链表实现系统进程列表,完成...
一、单链表的建立 有了动态内存分配的基础,要实现链表就不难了。所谓链表,就是用一组任意的存储单元存储线性表元素的一种数据结构。链表又分为单链表、双向链表和循环链表等。我们先讲讲单链表。所谓单链表,是指数据接点是单向排列的。一个单链表结点,其结构类型分为两部分:1、数据域:用来存储...

c语言数据结构单链表的初始化 插入 销毁 元素的取出 删除 操作 求详细C...
单链表功能大全,嘿嘿 include <stdio.h> include <stdlib.h> typedef struct node { int nDate;struct node *pstnext;}Node;\/\/链表输出 void output(Node *head){ Node *p = head->pstnext;while(NULL != p){ printf("%d ", p->nDate);p = p->pstnext;} printf("\\r\\n");} \/...

用c语言怎样做图形操作界面?详细点,最好有代码
\/* 窗口结构 *\/ wincl.hInstance = hThisInstance;wincl.lpszClassName = szClassName;wincl.lpfnWndProc = WindowProcedure;\/* 这个函数由Windows操作系统调用 *\/ wincl.style = CS_DBLCLKS; \/* 获取双击指令 *\/ wincl.cbSize = sizeof (WNDCLAS*);\/* 使用默认图标和鼠标指针 *\/ wincl....

用C语言和数据结构编写一个简单的程序(求源代码)
define MAX_NUMBER 6 \/\/修改这个参数来允许最大的位数,现设为6位 void GetZhe (const char * preStr,const char * strNum){ char newPreStr[MAX_NUMBER];char tmpStr[MAX_NUMBER];int i,j,k,iCnt;k = strlen(strNum);if (k>MAX_NUMBER) { printf("超过最大允许的位数:%d!",MAX_...

C语言数据结构无向图删除边
\/\/在用邻接表方式存储的无向图g中,删除边(i,j)void DeletEdge(AdjList g,int i,j){ \/\/先删除定点i的边(i,j)p=g[i].firstarc;pre=null; \/\/删顶点i 的边结点(i,j),pre是前驱指针 while (p)if (p->adjvex==j){ if(pre==null) g[i].firstarc=p->next;else pre->next=p->...

相似回答