用尾插法生成一个带头结点的单链表 20

用尾插法生成一个带头结点的单链表,从键盘输入一个数,在单链表中进行查找,如果查找成功,则删除该结点,否则,插入该结点。... 用尾插法生成一个带头结点的单链表,从键盘输入一个数,在单链表中进行查找,如果查找成功,则删除该结点,否则,插入该结点。 展开
 我来答
秋梵问楣0gP
2012-06-15
知道答主
回答量:5
采纳率:0%
帮助的人:6万
展开全部
首先,你是C还是C++语言,决定你用malloc函数还是new运算符来动态开辟结点。
其次,要设置指针,p1作为新开辟结点,p2指向尾结点。每次开辟一个新节点,就让当前尾结点的next域指向新结点,新结点的next置空,然后让p2重新定位到p1位置,新结点作为尾结点。这是尾插法建表。
再次,如果查找Key值,
k ←key;
for (p3=head;p3!=p2;p3++)
if p3→key == k
then ....↓....

注意,这里找到结点了,就要先把此结点前驱的尾指针指向此节点的后继,然后free或者delete就可以了,你如果想要具体的源代码,那么请参考

C程序设计,第四版,清华大学出版社,谭浩强,习题解答小册上,第十二章结构体和共同体中,关于链表的简单4个操作,
或者是C++程序设计,清华大学出版社,谭浩强,第八章面向过程程序设计,习题解答小册上也有C++版本的单链表处理。

如果你要能编译的源代码来交作业,请查阅上述两本书,绝对有。
如果你是为了学好C或者C++,请认真打扎实基本功。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-06-15
展开全部
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Lsin30
推荐于2017-05-30 · 超过16用户采纳过TA的回答
知道答主
回答量:80
采纳率:0%
帮助的人:47.5万
展开全部
#include <stdio.h>
#include <stdlib.h>

typedef struct node
{
int val;
struct node *next;
}NODE;

NODE *create_linklist(int len,int *a)
{
int i;
NODE *p = (NODE *)malloc(sizeof(NODE));
NODE *head = p;
NODE *q = NULL;

for (i = 0; i < len; ++i){
q = (NODE *)malloc(sizeof(NODE));
q->val = *(a+i);
p->next = q;
p = q;
}
p->next = NULL;

return head;
}

NODE *find_in_linklist(NODE *pnode,int val)
{
NODE *p = NULL;
if (!pnode->next){
return NULL;
}

p = pnode->next;
while(p){
if(val == p->val){
return p;
}
p = p->next;
}

return NULL;
}

int delete_node(NODE *pnode,NODE *pdel)
{
NODE *p = pnode->next;
NODE *q = pnode;

while(p){
if (p == pdel){
q->next = p->next;
free(p);
return 1;
}
p = p->next;
q = q->next;
}

return 0;
}

void print_linklist(NODE *pnode){
NODE *p = pnode->next;

while(p){
printf("%d ", p->val);
p = p->next;
}
printf("\n");
}

int main(int argc, char const *argv[])
{
/* code */
int a[] = {1,2,3,5};
NODE *p = create_linklist(4,a);
NODE *q = find_in_linklist(p,2);

print_linklist(p);

if(q){
if(delete_node(p,q)){
printf("delete successful!\n");
}
else{
printf("delete failed!\n");
}
}

print_linklist(p);
return 0;
}
追问
这个有点不完整啊   这“ 从键盘输入一个数,在单链表中进行查找,如果查找成功,则删除该结点,否则,插入该结点。”东西没出来啊
追答
等等
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
849079145
2012-06-15 · 超过18用户采纳过TA的回答
知道答主
回答量:336
采纳率:0%
帮助的人:111万
展开全部
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式