找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 5372|回复: 1

[例程] 【原创】取简单的链表操作

[复制链接]

1214

主题

352

回帖

11

精华

管理员

菜鸟

积分
93755

贡献奖关注奖人气王精英奖乐于助人勋章

发表于 2009-8-9 10:12:09 | 显示全部楼层 |阅读模式
<font face="Verdana">/* 编写函数实现链表的逆置。*/<br/>#include &lt;stdio.h&gt; /*标准输入、输出函数库*/<br/>#include &lt;stdlib.h&gt;<br/>#define LEN sizeof(struct list)<br/>/*定义节点数据类型*/<br/>struct list<br/>{<br/>&nbsp;int data; /*节点的数据类型,可以是其它类型*/<br/>&nbsp;struct list *next;<br/>};<br/>/* 创建链表,并返回表头指针 */<br/>struct list *create(void);<br/>/*对链表逆置的函数*/<br/>struct list *invert(struct list*);<br/>/*输出链表*/<br/>void print(struct list*);<br/>int main()<br/>{<br/>&nbsp;struct list *h,*t; /*定义一个链表,h为头指针*/<br/>&nbsp;h = create(); /*创建链表*/<br/>&nbsp;printf("创建的链表是:\n");<br/>&nbsp;print(h); /*输出所创建的链表*/<br/>&nbsp;t = invert(h); /*对链表进行逆置*/<br/>&nbsp;printf("逆置后的链表是:\n");<br/>&nbsp;print(t); /*输出逆置后的链表*/<br/>&nbsp;return 0;<br/>} <br/>struct list *create() /* 创建链表,并返回表头指针。带一个头指针的链表 */<br/>{<br/>&nbsp;struct list *head; /* 表头 */<br/>&nbsp;struct list *p;&nbsp;&nbsp;&nbsp; /* 新建结点 */<br/>&nbsp;struct list *tail; /*表尾节点*/<br/>&nbsp;int input; /*输入的数据*/<br/>&nbsp;head = NULL; /* 还没有任何数据,表头为空 */<br/>&nbsp;tail = head; /*尾指针首先指向表头指针*/<br/>&nbsp;printf("请输入结点数据:\n");<br/>&nbsp;scanf("%d", &amp;input);<br/>&nbsp;while (input != 0)<br/>&nbsp;&nbsp;/* 假设data为0表示输入结束 */<br/>&nbsp;{<br/>&nbsp;&nbsp;p = (struct list*)malloc(LEN); /* 新建一个结点 */<br/>&nbsp;&nbsp;p-&gt;data = input;<br/>&nbsp;&nbsp;p-&gt;next = NULL;<br/>&nbsp;&nbsp;if (head == NULL)<br/>&nbsp;&nbsp;&nbsp;/*链表为空表*/<br/>&nbsp;&nbsp;&nbsp;head = p;<br/>&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;tail-&gt;next = p;<br/>&nbsp;&nbsp;/* 在表尾链接新结点 */<br/>&nbsp;&nbsp;tail = p; /* 新建结点成为表尾 */<br/>&nbsp;&nbsp;printf("请输入结点数据:\n");<br/>&nbsp;&nbsp;scanf("%d", &amp;input);<br/>&nbsp;} if (head != NULL)<br/>&nbsp;&nbsp;/*输入了数据,已插入节点*/<br/>&nbsp;&nbsp;tail-&gt;next = NULL;<br/>&nbsp;/* 输入结束,表尾结点的下一个结点为空 */<br/>&nbsp;return head; /* 返回表头指针 */<br/>}<br/>void print(struct list *head) /*输出链表*/<br/>{<br/>&nbsp;if (head == NULL)<br/>&nbsp;{<br/>&nbsp;&nbsp;printf("链表空!\n");<br/>&nbsp;&nbsp;return ;<br/>&nbsp;} <br/>&nbsp;while (head != NULL)<br/>&nbsp;{<br/>&nbsp;&nbsp;printf("%4d", head-&gt;data);<br/>&nbsp;&nbsp;head = head-&gt;next;<br/>&nbsp;}<br/>&nbsp;printf("\n");<br/>}<br/>/*对链表逆置的函数*/<br/>struct list *invert(struct list *head)<br/>{<br/>&nbsp;struct list *p,&nbsp; *q; /*用于逆置的中间变量*/<br/>&nbsp;if (head == NULL)<br/>&nbsp;{<br/>&nbsp;&nbsp;printf("链表空!\n");<br/>&nbsp;&nbsp;return head;<br/>&nbsp;} p = head;<br/>&nbsp;head = NULL;<br/>&nbsp;while (p != NULL)<br/>&nbsp;{<br/>&nbsp;&nbsp;q = p-&gt;next;<br/>&nbsp;&nbsp;p-&gt;next = head;<br/>&nbsp;&nbsp;head = p;<br/>&nbsp;&nbsp;p = q;<br/>&nbsp;}<br/>&nbsp;return head;<br/>}</font>
【VB】QQ群:1422505加的请打上VB好友
【易语言】QQ群:9531809  或 177048
【FOXPRO】QQ群:6580324  或 33659603
【C/C++/VC】QQ群:3777552
【NiceBasic】QQ群:3703755

275

主题

3019

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17066

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2009-8-12 00:02:03 | 显示全部楼层
<p>.....被这玩意给玩过了- -!</p>
<p>&nbsp;</p>
<p>上次陈辉弄的那个代码里用的就是链表,直接晕掉@_@</p>
我就是嗷嗷叫的老马了......

您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表