| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1921 人关注过本帖
标题:[求助]请版主帮忙看看这个问题
取消只看楼主 加入收藏
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
 问题点数:0 回复次数:5 
[求助]请版主帮忙看看这个问题

我同学找我帮忙写个题 北邮数据结构程序设计题:

利用单链表实现以下要求

1。输入若干整数,输入过程中将它们构造成单向链表,插入时保持升序 2。从链表中添加或删除指定数值的数据项 3。将构造的上述链表逆项转置 ************************************************ 以下是我写的一个程序

#include <stdio.h> #include <malloc.h> typedef struct node *point; struct node { int data; point next; };

void print(point head)//输出链表 { point p; p=head->next; while(p) { printf("%d -> ",p->data); p=p->next; } printf("NULL "); }

void revers(point head)//链表逆转置 { point p,q,r; p=head->next; q=p->next; r=q->next; if(p==NULL || q==NULL) printf("该链表无须转置。"); p->next=NULL; p=q; while(r->next) { q=r; r=r->next; q->next=p; p=q; } r->next=p; head->next=r; }

void Insert(point p,int x)//按升序插入数据,允许有重复数据 { point q,r; q=p->next; while(q && q->data<x) { p=p->next; q=q->next; } r=(struct node *)malloc(sizeof(struct node)); if(!r) printf("分配失败"); r->data=x; r->next=q; if(!q) r->next=NULL; p->next=r; }

point creat()//任意顺序输入数据,建立升序链表 { int x; point p; point head;

head=(struct node *)malloc(sizeof(struct node)); if(!head) printf("分配失败/n"); p=head; printf("请输入数字:"); scanf("%d",&x); while(x!=0) { Insert(head,x); printf("请输入数字:"); scanf("%d",&x); } printf("您输入的数据为: "); print(head); return head; }

void Delet(point head,int x)//删除所有x { int i; point p; point q; point r; p=head; q=p->next; r=NULL; while(q) { if(q->data==x) { p->next=q->next; r=q; q=q->next; free(r); i++; } else { p=p->next;q=q->next; } } if(i==0) printf("输入的数不存在。"); else { printf("删除后链表变成:"); print(head); } }

void choose(point head) { int x; printf("a. 插入一个数据/n"); printf("b. 删除一个数据/n"); printf("c. 将该链表逆转置/n"); printf("d. 退出程序/n"); printf("请选择操作:/n"); char grade; grade=getchar(); if (grade=='a'||grade=='A') { printf("请输入要插入的数据:"); scanf("%d",&x); Insert(head,x); printf("插入后链表变成:"); print(head); choose(head); } else if (grade=='b'||grade=='B') { printf("请输入要删除的数据:"); scanf("%d",&x); Delet(head,x); printf("删除后链表变成:"); print(head); choose(head); } else if (grade=='c'||grade=='C') { printf("逆转置前链表为:"); print(head); revers(head); printf("逆转置后链表为:"); print(head); } else if (grade=='d'||grade=='D'); else { printf("输入错误,请重新选择:/n"); choose(head); } }

void main() { point head; head=creat(); choose(head); }

*********************************

运行环境VC++6.0 这个程序在compile 和build 时都没问题,能运行

但在BuildExecute时,输入第一个数后,就显示该内存为只读而跳出,

请斑竹帮帮忙,给个解决方案

bCQD3rF4.rar (1.43 KB) [求助]请版主帮忙看看这个问题

[此贴子已经被作者于2005-10-7 13:41:58编辑过]

搜索更多相关主题的帖子: 链表 版主 point node head 
2005-10-07 13:31
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
得分:0 
我还上传了个附件,怎么没了?

我的征途是星辰大海
2005-10-07 13:34
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
得分:0 
不好意思,我是写完了整体调试的.以后一定注意. 谢谢激情依旧和fire77.

我的征途是星辰大海
2005-10-12 14:56
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
得分:0 
struct node-----------定义的一个结构类型
{
int data;
point next;
}Node;------------定义的一个叫Node的结构体

等效于

struct {
int data;
point next;
}Node;

struct node
{
int data;
point next;
};
node Node;

再举个例子
struct node
{
int data;
point next;
}
Node1,Node2,Node3,*p;
这是定义了3个结构类型都为node的不同结构体Node1,Node2,Node3, (而p是一个指针,没有特殊含义。应该为p是一个指针类型,可以用来定义对象)

[此贴子已经被作者于2006-4-18 13:57:03编辑过]


我的征途是星辰大海
2005-10-20 14:07
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
得分:0 
我错了。定义出来的的确是指针类型的。一时糊涂啊。多谢版主。 struct 结构体名 { 成员表列 }变量名表列; 以下3种情况等价 1。结构体变量.成员名 2。(*p).成员名 3。p->成员名

我的征途是星辰大海
2005-10-20 16:27
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
得分:0 
明年我也去试试啊,呵呵

我的征途是星辰大海
2005-11-11 15:01
快速回复:[求助]请版主帮忙看看这个问题
数据加载中...
 
   



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

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