| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 552 人关注过本帖
标题:[求助]帮忙修改修改这个程序......
只看楼主 加入收藏
随笔
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-1-13
收藏
 问题点数:0 回复次数:2 
[求助]帮忙修改修改这个程序......

#include<stdio.h>
#include<malloc.h>


typedef int elemtype;/*定义数据域类型*/
typedef struct linknode/*定义结点类型*/
{
elemtype data;
struct linknode *next;
}nodetype;


nodetype *creat()/*建立单链表,由用户输入各结点data域的值,以0表示结束*/
{
elemtype d;
nodetype *h=NULL,*s,*t;
int i=1;
printf("建立一个单链表","\n");
while(1)
{
printf("输入第i个结点的data域的值:");
scanf("elemtype",&d);
if(d==0) break;/*以0表示输入结束*/
if(i==1) /*建立第一个结点*/
{
h=(nodetype*)malloc(sizeof(nodetype));
h->data=d;h->next=NULL;t=h;
}
else/*建立其他结点*/
{
s=(nodetype*)malloc(sizeof(nodetype));
s->data=d;s->next=NULL;t->next=s;
t=s;/*t始终指向生成的单链表的最后一个结点*/
}
i++;
}
return h;
}


int length(nodetype*h)/*返回单链表的长度*/
{int i=0;
nodetype *p=h;
while(p!=NULL)
{p=p->next;i++;}
return i;
}


nodetype*find(nodetype*h,int i)/*返回第i个结点的指针*/
{nodetype*p=h;
int j=1;
if(i>length||i<=0) return NULL;
else
{while(p!=NULL&&j<i)/*查找第i个结点,并由p指向该结点*/
{j++;p=p->next;}
return p;
}
}


nodetype *insert(nodetype*h,int i,elemtype x)/*在单链表head中第i个结点(i>=0)
之后插入一个data域为x的结点*/

{nodetype*p,*s;
s=(nodetype*)malloc(sizeof(nodetype));/*创建结点s*/
s->data=x;s->next=NULL;
if(i==0)/*i=0:s作为单链表的第一个结点*/
{s->next=h;h=s;}
else
{p=find(h,i);/*查找第i个结点,并由p指向该结点*/
if(p!=NULL)
{s->next=p->next;p->next=s;}
else printf("输入的i值不正确\n");
}
return h;
}


nodetype*delete(nodetype*h,int i)/*删除第i个结点*/
{nodetype*p=h,*s;
int j=1;
if(i==1)/*删除第1个结点*/
{ h=h->next;free(p);}
else
{p=find(h,i-1);/*查找第i个结点,并由p指向该结点*/
if(p!=NULL&&p->next!=NULL)
{s=p->next;/*s指向要删除的结点*/
s->next=p->next;free(s);
}
else printf("输入的i值不正确\n");
}
return h;
}


void disp(nodetype*h)/*输出由h指向的单链表的所有data域值*/
{nodetype*p=h;
printf("输出一个单链表\n");
if(p=NULL)
printf("空表");
while(p!=NULL)
{printf("p->data");
p=p->next;
}
printf("\n");
}


nodetype*order(nodetype*h)
{nodetype*head,*p=h,*q,*r,*t;
head=(nodetype*)malloc(sizeof(nodetype));/*head为哨兵*/
head->data=0;/*存放有序单链表的结点个数*/
head->next=NULL;
while(p!=NULL)
{if(head->data=0)/*有序单链表为空的情况*/
{head->next=p;
q=p->next;
p->next=NULL;
p=q;
}
else
{q=head->next;r=head;
while(q!=NULL&&p->data>q->data)/*找到r结点,将p结点插入其后*/
{ r=q;
q=q->next;
}
t=p->next;
p->next=r->next;
r->next=p;
p=t;
}
head->data++;
}
t=head;
head=head->next;
free(t);/*删除哨兵*/
return head;
}


nodetype*combine(nodetype*ha,nodetype*hb)
{
nodetype*hc=ha,*pa=ha,*pb=hb,*q,*r;
if(length(pa)!=length(pb))
{printf("两个单链表的长度不同\n");
return NULL;
}
while(pa!=NULL)
{q=pa->next;
r=pb->next;
pa->next=pb;
pb->next=q;
pa=q;
pb=r;
}
return (hc);
}


void main()
{ int i,k;elemtype x;
nodetype*head,*ha,*hb,*hc,*hd,*he;
head=creat();
disp(head);
ha=insert(head,i,x);
{scanf("%d,elemtype",&i,&x);}
hb=delete(head,k);
{scanf("%d",&k);}
hc=order(ha);
hd=order(hb);
disp(hc);
disp(hd);
he=combine(hc,hd);
disp(he);
}



急需,请高手快点帮忙.......谢谢.....

2007-01-13 22:11
e4lich
Rank: 2
等 级:新手上路
威 望:4
帖 子:182
专家分:0
注 册:2006-10-26
收藏
得分:0 
给你的目的和思路看看吗?这样看问题挺麻烦的!

我只想变强!     
2007-01-16 21:45
lunly
Rank: 1
等 级:新手上路
帖 子:295
专家分:0
注 册:2007-1-17
收藏
得分:0 

虽然C#跟C++,C差不多,可是我没多看懂这个...


2007-01-17 16:10
快速回复:[求助]帮忙修改修改这个程序......
数据加载中...
 
   



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

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