| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3148 人关注过本帖
标题:[求助]编写一个双向链表的程序
只看楼主 加入收藏
zhengwenqi
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2006-5-12
收藏
得分:0 

写出利用尾插法和头插法建立一个含有头结点的非循环单链表的算法

尾插法建立:保证新生成的结点成为整体链的尾结点就行

1)下面用中文描述的尾插法算法

建立一个头结点并令指针S指向头结点

读入数据X

循环:当读入的数据符合条件时,重复执行

建立一个新结点

x置入新结点的数据域,且新结点的指针域赋值为空

把新结点的链接到原来的单链表的尾部

使当前新结点成为尾部结点,即令指针s指向链表的尾结点。

输入新数据

循环结束

2)下面给出用C描述的尾插法算法

static createlist1(&L)

{ s=(Linklist)malloc(sizeof(Lnode)) //生成一个新结点,且指针s指向它

L=s //L返回链的头结点,标识链

s.next=NULL

sanf(“input data x“,&x);

while (x!=0) /此处假设读入数据为0时结束建立链表

{ t=(Linklist)malloc(sizeof(Lnode)); // 建立新结点

t.data=x ; t.next=NULL;

s.next=t;

s=s.next

sanf(“input data x“,&x);

}

}

头插法建立:保证新生成的结点成为头结点的直接后继就行

static createlist2(&L)

{ L=(Linklist)malloc(sizeof(Lnode)) //生成一个新结点,且指针s指向它

L.next=NULL //L返回链的头结点,标识链

sanf(“input data x“,&x);

if (x!=0) {

t=(Linklist)malloc(sizeof(Lnode)); // 建立新结点

t.data=x ; t.next=NULL; } //建立第一个数据结点

sanf(“input data x“,&x); //下面开始循环建立其它结点

while (x!=0) /此处假设读入数据为0时结束建立链表

{ t=(Linklist)malloc(sizeof(Lnode)); // 建立新结点

t.data=x ; .t.next=L.next

L.next=t

sanf(“input data x“,&x);

} }


一如往昔……
2006-05-19 23:15
zhengwenqi
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2006-5-12
收藏
得分:0 

昨天说那个你帮我看了没?


一如往昔……
2006-05-20 12:37
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 
诶,这问题,诶,你写的那个就是从后边插入的,是正确的

从前边插入的那不就表,那叫栈,很简单,新接点指向头结点,新结点成为头结点不就完了吗

从前边插入比从后边插入简单多了,你再想想

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-20 13:33
zhengwenqi
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2006-5-12
收藏
得分:0 
你帮我做一下嘛`明天要交作业了,我还是不会啊

一如往昔……
2006-05-20 15:26
zhengwenqi
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2006-5-12
收藏
得分:0 
我的意思是你直接帮我把这两个都做成程序,我拿过去直接就可以上机调试了

一如往昔……
2006-05-20 15:35
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
咳,,何必呢

2006-05-20 15:55
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 
LZ可找到一个好力工哦~!

[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-05-20 16:01
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 
我写很简单的事情了,但我写出来你也不明白我程序的思路啊,即便程序能运行成功,但你不了解它啊

行,写给你

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-20 16:09
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
得分:0 
以下是引用论坛在2006-5-20 13:33:00的发言:

从前边插入的那不就表,那叫栈

这句话不对哦, 栈可是一段连续的空间, 跟链表撤不上关系, 顺序表倒挺象的
ps: 没想到论坛上美女ID这么吃香, 早知道就冒充美女了


我的征途是星辰大海
2006-05-20 16:30
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 

从前边插入

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

typedef struct node
{
char data;
struct node *nextPtr;
}*LinkList, Lnode;

static void CreateList(LinkList *headPtr);
static void PrintList(LinkList headPtr);
static void DestroyList(LinkList *headPtr);

int main(void)
{
LinkList headPtr = NULL;

CreateList(&headPtr);

PrintList(headPtr);

DestroyList(&headPtr);

getch();
return 0;
}

static void CreateList(LinkList *headPtr)
{
LinkList newPtr;
int c;

while ((c = getchar()) != EOF)
{
if ((newPtr = (LinkList)malloc(sizeof(Lnode))) == NULL)
{
exit(1);
}
newPtr -> data = c;
newPtr -> nextPtr = *headPtr;
*headPtr = newPtr;
}
}

static void PrintList(LinkList headPtr)
{
for (; headPtr != NULL; headPtr = headPtr -> nextPtr)
{
putchar(headPtr -> data);
}
}

static void DestroyList(LinkList *headPtr)
{
LinkList tempPtr;

while (*headPtr != NULL)
{
tempPtr = *headPtr;
*headPtr = (*headPtr) -> nextPtr;
free(tempPtr);
}
}




日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-20 16:34
快速回复:[求助]编写一个双向链表的程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027208 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved