这个程序,我不会改,谁帮帮俺
#include<stdio.h>
#include<stdlib.h>
typedef struct mylist
{
int data;
struct mylist *next;
}mylist;
mylist * insert(int d, mylist *head)/*建立链表就是一个插入数据的过程 */
{
mylist *p,*q,*r;
p =(struct mylist *) malloc(sizeof(struct mylist));
p->data = d;
p->next =NULL;
if(head ==NULL)
return p;
q = head;
if(q->data < d)
p->next = q;
return p;
r= q;
q = q->next;
while(q && q->data < d)
{
r = q;
q = q->next;
}
r ->next = p;
p ->next = q;
return head;
}
mylist *del(mylist *head)
{
mylist *q, *r;
int d;
printf("del data:");
scanf(&d,"%d");
q = head;
r = q->next;
if(q->data == d)
{
free(q) ;
return r;
}
while( r->data != d && r)
{
q = r;
r = r->next;
}
if(r == NULL) return head;
q->next = r->next;
free(r);
return head;
}
mylist *join(mylist *p,mylist *q)
{
mylist *r;
while(p)/*因为插入过程会排序,所以可以直接插入数据*/
{
r=insert(p->data,r);
p = p->next;
}
while(q)
{
r=insert(q->data,r);
q = q->next;
}
return r;
}
void print(mylist *h)
{
mylist *temp;
temp=h;
while(temp=!NULL)
{
printf("%d",temp->data);
temp= temp->next;
}
}
main()
{
mylist *head;
if(head->next==NULL){printf("ok");
exit(0); }
head=insert(10,head);
print(head);
}
这个程序的目的 是
编写连表建立函数,输入时 自动排序建立连表
编写连表 插入函数,删除函数 (删除某个接点,并释放存储区)
编写 连表合并函数,可以合并两个已知函数,并保证 合并后连表有序
主程序 应具有 连续输入功能
和显示输出
具有简单的操作界面 (只要是简单的 提示语句就成)
这个主程序我没怎么写,就是在测试时 出现了死循环,也不知道怎么回事
不知道大家可否 帮我写个主程序
再帮我检查别的函数是不是好用
好象要求多了些,大家多受累了
问题点数:100、回复次数:17Top
1 楼lark3(海鸥)回复于 2004-09-03 20:52:29 得分 0
自己写吧,学习...Top
2 楼coyprightbao(Mr'Bao)回复于 2004-09-03 21:13:28 得分 0
mark!
Top
3 楼xteaj(半桶水)回复于 2004-09-03 21:36:29 得分 0
我的程序都是用C++写的,注意了,在C中要稍作调整。
main()
{
int i ,data;
mylist *list1,*list2;
do
{
system("cls");//清屏
printf("1......insert data to list1\n");
printf("2......delete data from list1\n");
printf("3......insert data to list2\n");
printf("4......delete data from list2\n");
printf("5......join list1 and list2\n");
printf("6......print list1 and list2\n");
printf("7......exit\n");
printf("Please select :");
scanf("%d",&i)
switch(i)
{
case 1:
system("cls");
printf("Please input data for list1:");
scanf("%d",&data);
list1 = insert(data,list1);
.........
剩下的自己写,不要忘了给分,上次的分还没给呢Top
4 楼maxcode(人弋石马)回复于 2004-09-03 21:39:55 得分 0
楼上的太苛刻了吧!!!
翻人家老底儿
哈哈!!!
学习Top
5 楼gsp396(火烧耳朵)回复于 2004-09-03 21:45:21 得分 0
大家 仔细看看
那个程序 是有问题的 出现死循环了
谁帮我看看,仔细的看看 每个函数的看看
分我过几天给拉,这写天 闹心Top
6 楼gsp396(火烧耳朵)回复于 2004-09-03 21:46:17 得分 0
要求连续输入 数据
再加上一些简单的提示Top
7 楼xteaj(半桶水)回复于 2004-09-03 21:49:24 得分 0
在case中再写一个while也不难,自己试一试吧。Top
8 楼xteaj(半桶水)回复于 2004-09-03 21:54:50 得分 2
mylist * insert(int d, mylist *head)/*建立链表就是一个插入数据的过程 */
{
mylist *p,*q,*r;
p =(struct mylist *) malloc(sizeof(struct mylist));
p->data = d;
p->next =NULL;
if(head ==NULL)
return p;
q = head;
if(q->data < d)
{
q->next = p->next;
p->next = q;
}
return head;
r= q;
q = q->next;
while(q && q->data < d)
{
r = q;
q = q->next;
}
r ->next = p;
p ->next = q;
return head;
}
这是insert中的一个小错误,对不起了Top
9 楼xteaj(半桶水)回复于 2004-09-03 21:57:36 得分 0
void print(mylist *h)
{
mylist *temp;
temp=h;
while(temp!=NULL)//这都能错,真佩服你了
{
printf("%d",temp->data);
temp= temp->next;
}
}Top
10 楼liacw1017(梁上君子)回复于 2004-09-03 22:02:56 得分 2
太長了,沒時間寫啊,支持以下樓主算了Top
11 楼fanbest(座天使长)回复于 2004-09-03 22:03:11 得分 2
自己写吧.
自己写吧.
摆脱别人写代码可不好滴.Top
12 楼xteaj(半桶水)回复于 2004-09-03 22:07:05 得分 5
自己多练习练习,注意输出时两个数据之间要留空格!
好好学习,天天学习,定能出好成绩!
祝你早日学好C!Top
13 楼UPCC(杂食动物)回复于 2004-09-03 23:13:13 得分 80
#include<stdio.h>
#include<stdlib.h>
typedef struct mylist
{
int data;
struct mylist *next;
}mylist;
mylist * insert(int d, mylist *head)/*建立链表就是一个插入数据的过程 */
{
mylist *p,*q,*r;
p = (struct mylist *) malloc(sizeof(struct mylist));
p->data = d;
p->next =NULL;
if(head == NULL)
return p;
q = head;
/*
if(q->data < d)
{
p->next = q;
return p;
}//这里必须使用双大括号,不然会返回在return p;
*/
//其实上面这一步没有必要
r= q;
//q = q->next;
while(q && q->data < d)
{
r = q;
q = q->next;
}
if(r==q)//防止头是已经大了
{
p->next = head;
return p;
}
if(q)//有时候已经到队为了,这是q==NULL了
{
r ->next = p;
p ->next = q;
}
else
{
r->next = p;
}
return head;
}
mylist *del(mylist *head)
{
mylist *q, *r;
int d;
printf("del data:");
scanf("%d",&d);
q = head;
r = q->next;
if(q->data == d)
{
free(q) ;
return r;
}
while( r->data != d && r)
{
q = r;
r = r->next;
}
if(r == NULL) return head;
q->next = r->next;
free(r);
return head;
}
mylist *join(mylist *p,mylist *q)
{
mylist *r=NULL;//不然不会被正常排列
while(p)/*因为插入过程会排序,所以可以直接插入数据*/
{
r=insert(p->data,r);
p = p->next;
}
while(q)
{
r=insert(q->data,r);
q = q->next;
}
return r;
}
void print(mylist *h)
{
mylist *temp;
temp=h;
while(temp)////
{
printf("%d\n",temp->data);
temp = temp->next;
}
}
int main()
{
/*
这里没有初始化会在insert里面
if(head == NULL)
return p;
出现问题,至少应该在定义时mylist* head = NULL;但这不是你要的。
*/
mylist *head=(mylist*)malloc(sizeof(mylist));
head->data = 5;//这是先个个数字,不燃是随机值而在insert里对比会有问题(小)
head->next = NULL;//没有初始化,head->next会是一个随机值
/*
if(head->next==NULL){printf("ok");
exit(0); }
*/
head=insert(10,head);
head=insert(8,head);
head=insert(1,head);
print(head);
printf("del start\n");
head = del(head);
print(head);
printf("join start\n");
mylist* tmp = (mylist*)malloc(sizeof(mylist));
tmp->data = 4;
tmp->next = NULL;
head = join(head,tmp);
print(head);
return 0;
}
这是你需要的Top
14 楼UPCC(杂食动物)回复于 2004-09-03 23:51:06 得分 0
记得释放内存
free()Top
15 楼Tycool(Xuco)回复于 2004-09-04 10:07:15 得分 5
强烈建议学习debug,比如在VC中调试着找问题Top
16 楼qingyuan18(zealot_tang)回复于 2004-09-04 14:54:24 得分 2
这不是数据结构么?我喜欢,先在机器上调一下,等会儿就来Top
17 楼liyu_ah()回复于 2004-09-04 16:10:18 得分 2
main()
{
mylist *head =NULL;
head=insert(10,head);
print(head);
}
程序写的一点都不规范
懒的看
Top




