C语言 关于链表的创建过程

博客访问: 387000
博文数量: 265
博客积分: 8433
博客等级: 中将
技术积分: 2151
注册时间:
分类: C/C++ 15:18:12
001&&&&////////////////////////////////////////////
002&&&&//双链表的初始化,建立,插入,查找,删除。//
003&&&&//Author:Wang Yong
004&&&&//Date:
005&&&&////////////////////////////////////////////
008&&&&#include <stdio.h>
009&&&&#include <stdlib.h>
011&&&&typedef int ElemType;
012&&&&////////////////////////////////////////////
014&&&&// 定义双链表结点类型
016&&&&typedef struct Node
ElemType data;
struct Node *prior;
//指向前驱结点
struct Node *next;
//指向后继结点
021&&&&}Node, *DLinkList;
023&&&&////////////////////////////////////////////
025&&&&//双链表的建立,采用尾插法建立双链表
026&&&&DLinkList DLinkListCreatT()
Node *L,*p,*r;
L = (Node *)malloc(sizeof(Node));//申请头结点
L->next = NULL;
r->next = NULL;
//r 为指向终端结点的指针
ElemType x;
while(scanf("%d",&x) != EOF)
//输入双链表元素,建立双链表
p = (Node *)malloc(sizeof(Node));
p->data = x;
p->next = r->next;
r->next = p;
r->next = NULL;
046&&&&/////////////////////////////////////////
048&&&&//双链表的查找,查找元素为x的位置
050&&&&int DLinkListFind(DLinkList L,ElemType x)
DLinkList p;
//p为检索,
p = L->next;
int i = 1;
while(p != NULL && p->data != x )//寻找值为x的元素**注意这里循环的条件不能写反
//原因,当p == NULL 时候 p->data 会出错
for (i = 1, p = L-> p = p->next, i++) {
if (p->data == x)}
p = p->next;
if(p == NULL)
//如果没找到返回0
else return i;
//如果找到返回i
066&&&&/////////////////////////////////////////
068&&&&//双链表的插入,在双链表中的第i个位置插入值为x的元素
070&&&&DLinkList DLinkListInsert(DLinkList L,int i,ElemType x)
DLinkList p,s;
//s为要插入的结点
p = L->next;
//从第一个结点位置开始查找
int tempi;
for(tempi = 1;tempi < i-1; tempi++)
p = p->next;
s = (Node *)malloc(sizeof(Node));
s->data = x;
//将x赋值到s的数据域
s->next = p->next;
//将结点插入
p->next->prior = s;
s->prior = p;
p->next = s;
088&&&&//////////////////////////////////////////////
090&&&&//双链表的删除,删除双链表中第i个结点
092&&&&DLinkList DLinkListDelete(DLinkList L,int i)
int tempi = 1;
DLinkList p;
//p为查找结点。
p = L->next;
while((tempi++) != i && p != NULL)
p = p->next;
if(p == NULL)
//检查是不是在双链表中的位置
printf("位置不合法。\n");
else if(p->next == NULL)
//最后一个结点特殊处理,原因最后一个结点p->next没有prior
p->prior->next = NULL;
//进行删除操作
p->prior->next = p->next;
p->next->prior = p->prior;
116&&&&///////////////////////////////////////////
117&&&&int main()
DLinkList list,start;
list = DLinkListCreatT();
for(start = list->next; start != NULL; start = start->next)
printf("%d ",start->data);
printf("\n");
ElemType x;
printf("请输入要查找元素的值:");
scanf("%d",&x);
i = DLinkListFind(list,x);
printf("在链表中的位置为:%d\n",i);
printf("没有这个元素。\n");
printf("请输入插入位置:");
scanf("%d",&i);
printf("请输入插入元素的值:");
scanf("%d",&x);
DLinkListInsert(list,i,x);
for(start = list->next; start != NULL; start = start->next)
printf("%d ",start->data);
printf("\n");
printf("请输入要删除的位置:");
scanf("%d",&i);
DLinkListDelete(list,i);
for(start = list->next; start != NULL; start = start->next)
printf("%d ",start->data);
printf("\n");
阅读(549) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
请登录后评论。在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
#include&stdio.h&
#include&stdlib.h&
typedef struct node{
struct node *
int main(void)
Node *link=NULL,*
if(link=(Node *) malloc(sizeof(Node)))
link-&num=-1;
link-&next=NULL;
node=link-&
for(;i&10;i++)
if(node=(Node *) malloc(sizeof(Node)))
node-&num=i;
node-&next=NULL;
node=node-&
for(node=link-&node=node-&next)
printf("%d
",node-&num);
putchar('\n');
运行这段代码并没有任何数字显示,为什么呢?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
link-&next=NULL;
node=link-&
这两行执行过之后并没有让link-&next指向node,只是把node设置为空罢了,你应该在for循环后把link-&next指向链表的第一个节点
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。已解决问题
速求线性链表的建立 插入 删除 的C语言程序
浏览次数:1542
用手机阿里扫一扫
最满意答案
#include&stdio.h&#include&stdlib.h&#include&malloc.h&/*假设输入的数据为3个*/#define&size&3typedef&struct&List{&&&&int&L&&//位置&,这里不以head开始,head-&next才表示0;&&&&int&D&//存储的数据&&&&struct&List&*}/*头结点*/list&*setup_list(list&*head){&&&&printf(&setup_list\n&);&&&&head=malloc(sizeof(list));&&&&if(head==NULL)&&&&{&&&&&&&&printf(&setup&fail\n&);&&&&&&&&getchar();&&&&&&&&exit(0);&&&&}&&&&head-&Loc=-1;&&&&head-&Data=0;&&&&head-&next=NULL;&&&&printf(&setup&success\n&);&&&&return&}/*输入数据,这里的head并不存储实际的数据。所以长度不算他。*/void&input(list&*head,int&Loc){&&&&list&*q=NULL;&&&&list&*s=NULL;&&&&s=malloc(sizeof(list));&&&&s-&next=NULL;&&&&printf(&input&the&%d&data:&,Loc);&&&&scanf(&%d&,&s-&Data);&&&&s-&Loc=L&&&&q=&&&&while(q-&next!=NULL)&&&&{&&&&&&&&q=q-&&&&&}&&&&q-&next=s;}/*浏览,显示出所有&数据*/void&browse(list&*head){&&&&list&*q=NULL;&&&&q=head-&&&&&while(q!=NULL)&&&&{&&&&&&&&printf(&Loc:%d&,q-&Loc);&&&&&&&&printf(&&&&Data:%d\n&,q-&Data);&&&&&&&&q=q-&&&&&}}/*插入num值有主函数控制*/void&insert_list(list&*head,int&Loc){&&&&list&*q=NULL;&&&&list&*p=NULL;&&&&list&*s=NULL;&&&&q=&&&&p=q-&&&&&while(p!=NULL&&p-&Loc!=Loc)&&&&{&&&&&&&&q=p;&&&&&&&&p=q-&&&&&}&&&&s=malloc(sizeof(list));&&&&printf(&input&Data&);&&&&scanf(&%d&,&s-&Data);&&&&s-&Loc=L&&&&q-&next=s;&&&&s-&next=p;&&&&/*整理&num后面的数后推*/&&&&while(p!=NULL)&&&&{&&&&&&&&Loc++;&&&&&&&&p-&Loc=L&&&&&&&&p=p-&&&&&}}/*删除指定Loc位置上的数据*/void&delete_list(list&*head,int&Loc){&&&&list&*q=NULL;&&&&list&*p=NULL;&&&&q=&&&&p=q-&&&&&while(p&!=&NULL&&&&p-&Loc&!=&Loc)&&&&{&&&&&&&&q=p;&&&&&&&&p=q-&&&&&}&&&&q-&next=p-&&&&&free(p);&&&&printf(&Loc&%d\n&,Loc);&&&&p=q-&&&&&while(p!=NULL)&&&&{&&&&&&&&p-&Loc=L&&&&&&&&Loc++;&&&&&&&&p=p-&&&&&}}/*查找元素&并返回位置*/list&*find_list(list&*head,int&data){&&&&list&*q=NULL;&&&&list&*p=NULL;&&&&q=&&&&p=q-&&&&&while(p&!=&NULL&&&&p-&Data&!=&data)&&&&{&&&&&&&&q=p;&&&&&&&&p=q-&&&&&}&&&&printf(&Loc&:%d&Data&:&%d\n&,p-&Loc,p-&Data);&&&&return&p;}/*返回链表的长度*/void&list_length(list&*head){&&&&list&*q&=&NULL;&&&&q&=&&&&&int&len=0;&&&&while(q-&next&!=&NULL)&&&&{&&&&&&&&len++;&&&&&&&&q&=&q-&&&&&}&&&&printf(&List&len=%d\n&,len);}void&exit_list(list&*head){&&&&printf(&exit&ok&);&&&&free(head);&&&&getchar();}int&main(){&&&&int&selectNum=0;&&&&int&Loc=0;&&&&int&Data=0;&&&&int&i=0;&&&&list&*head=NULL;&&&&list&*s=NULL;&/*接收指针&case3的指针接收*/&&&&head=setup_list(head);&&&&for(i=0;i&i++)&&&&{&&&&&&&&input(head,i);&&&//一开始,先建立长度为3的链表,位置&分别为&0,1,2&&&&}&&&&printf(&\n*********************************************************\n&);&&&&printf(&/*1插入&2删除&3查找&4浏览&5返回长度&6退出*/\n&);&&&&printf(&*********************************************************\n&);&&&&for(;;)&&&&{&&&&&&&&printf(&input&selectNum:\n&);&&&&&&&&scanf(&%d&,&selectNum);&&&&&&&&switch(selectNum)&&&&&&&&{&&&&&&&&&&&&case&1:&&&&&&&&&&&&&&&&printf(&insert&\n&input&Loc:&);&&//&Loc插入链表的位置&。&&&&&&&&&&&&&&&&scanf(&%d&,&Loc);&&&&&&&&&&&&&&&&insert_list(head,Loc);&&&&&&&&&&&&&&&&&&&&&&&&&&&&case&2:&&&&&&&&&&&&&&&&printf(&delete&\n&input&Loc:&);&&//Loc&删除链表的那个位置从0开始&&&&&&&&&&&&&&&&scanf(&%d&,&Loc);&&&&&&&&&&&&&&&&delete_list(head,Loc);&&&&&&&&&&&&&&&&&&&&&&&&&&&&case&3:&&&&&&&&&&&&&&&&printf(&find&\n&input&Data:&);&&//查找数据&。这里Data为要查询的数据。&&&&&&&&&&&&&&&&scanf(&%d&,&Data);&&&&&&&&&&&&&&&&s=find_list(head,Data);&&&&&&&&&&&&&&&&&&&&&&&&&&&&case&4:&&&&&&&&&&&&&&&&browse(head);&&&//整个输出&&&&&&&&&&&&&&&&&&&&&&&&&&&&case&5:&&&&&&&&&&&&&&&&list_length(head);&&//长度&&&&&&&&&&&&&&&&&&&&&&&&&&&&case&6:&&&&&&&&&&&&&&&&exit_list(head);&&&&&&&&&&&&&&&&return&0;&&&&&&&&&&&&default:&&&&&&&&&&&&&&&&&&&&&&&&}&&&&}&&&&return&0;}输入的顺序如下:1&2&3&&&//建立链表1&4&1&&//表示1选择插入,在4号位置,插入数据为14&&&//显示整个链表5&&//链表长度6&//结束。
答案创立者
以企业身份回答&
正在进行的活动
生意经不允许发广告,违者直接删除
复制问题或回答,一经发现,拉黑7天
快速解决你的电商难题
店铺优化排查提升2倍流量
擅长&nbsp 店铺优化
您可能有同感的问题
扫一扫用手机阿里看生意经
问题排行榜
当前问题的答案已经被保护,只有知县(三级)以上的用户可以编辑!写下您的建议,管理员会及时与您联络!
server is okC语言链表使用? - 知乎4被浏览152分享邀请回答0添加评论分享收藏感谢收起0添加评论分享收藏感谢收起写回答C语言,创建一个链表并赋值1、2、3、4、5,麻烦把全部程序写下_百度知道
C语言,创建一个链表并赋值1、2、3、4、5,麻烦把全部程序写下
请在程序中直接赋值,不要用屏幕录入的那种。
我有更好的答案
// DLink.cpp : 定义控制台应用程序的入口点。//#include &stdafx.h&#include &malloc.h&typedef struct LNode{
struct LNode *}Dint _tmain(int argc, _TCHAR* argv[]){
Dlink *l,*s1;
Dlink *s=(Dlink *)malloc(sizeof(Dlink));
for(int i=0;i&5;i++)
s-&data=i+1;
s1=(Dlink *)malloc(sizeof(Dlink));
s-&next=s1;
s-&next=NULL;
//数据就保存到以l为头结点的链表中了
return 0;}vs2010下成功运行!希望对你有帮助!有疑问请追问,谢谢!
采纳率:53%
//应该写的很清楚了 #include &stdio.h&#include &stdlib.h&typedef struct node{
struct node *}node,*Lint main(){
int a[5]={1,2,3,4,5};
Linklist L;
L=(Linklist)malloc(sizeof(node));
node *p,*s;
L-&next=NULL;
//依次将数组a中的5个元素插入单链表中
for(i=0;i&5;i++){
p=(node*)malloc(sizeof(node));
p-&data=a[i];
p-&next=s-&
s-&next=p;
} //将该链表打印出来
p=L-& while(p){
printf(&%d &,p-&data);
p=p-& } return 0;}
为您推荐:
其他类似问题
链表的相关知识
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 无头结点的单链表创建 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信