|
需要两段代码,希望有人帮忙
|
类别:
程序设计
时间:
2007.03.15
|
JOHUA
|
会C语言的就进来帮我一下!!多谢!!!
请可不可以帮我编一编这个程序,一定要用C语言编的啊!!! 程序如下: 1:建立链表 2:删除链表 3:插入结点 4:输出链表 5:退出 这个程序我以编了出来,但好长!!我想看看多一点高手的编写,好好的学习一下!!!多谢各位的指教!!小弟感激不尽!!
|
JOHUA
|
我看了!!!只是因为我编的那程序太长了!!!想看看别人的编写啊!!
|
hgs
|
呵呵~不知道你想有什么不同,改下子程序名吗~要改结构怕还是书上的简单啊! 记得编好了给大家看看哦!
|
beblie
|
不如你把你的写出来,,,我们看看啊,,参考一下,,,
|
JOHUA
|
#define NULL 0 #define LEN sizeof(s) int n; s {long num; s *data; s *next; }; s *creat(void) {s *head; s *p1,p2; long num; p1=(S *)malloc(LEN); head=p1; p2=(S *)malloc(LEN); printf("请输入建立表数输0为退出"); scanf(%ld",num); while(num=0) {p2->data=num;p2->next=NULL; p2=(s *)malloc(LEN); scanf("%ld",num); } return(head); } s *del(s *head) {s *p1,p2; int i; int j=1; p1=head; loop: printf("\n当前共有的结点数%d",n); printf("\n请输入删除的data值"); scanf("%d",i) if((i<0)&&(i>n)) {printf("错误!请重新输入: "); goto } if(i=1) {head=p1->next; p1->next=head->next; } else {while(j<i-1) {p1=p1->next; i++} p2=p1->next;p1->next=p2->next; } n=n-1; free(p1); return(hexd); } } s *insert(s *head) {s *p1,*p2,p0; int p; int j=1; long num; p1=head; printf("\n请输入在第几个结点前插入新结点?"); scanf(%d",&p); if(p=0) {p0=(s *)malloc(LEN); printf("\n请输入该结点的data值:"); scanf(%ld",&num): p0->=data=num;p0->next=p1->next; head=p0; p1=p0;n=n+1; return(head); } else {while(j<p-1) {p1=p->next;j++;} p0=(s *)malloc(LEN); printf("\n请输入该结点的data值:"); scanf("%ld",num); p0->data=num; if(p>n) {p0->next=0; p1->next=p0; n=n+1; reture(head); } else {p0->next=p1->next; p1->next=p0; n=n+1; reture(head); } } void print(s *head); {s *p1; printf("\n当前链表的个数一共有:%d个",n); p1=head; while(p1!=NULL); {printf("%ld"p1->num); p1=p1->next; } } viod ss() {printf("链表还没有建立,请重新建立链表先!\n");} main() {s *head; int i,k=0; long num; printf("1:建立链表\n"); printf("2:删除结点\n"); printf("3:插入结点\n"); printf("4:输出链表\n"); printf("5:退出\n"); printf("请输入你的操作选项:"); scanf("%d",&i); while(i!=5) {switch(i) {case 1: {if(k==0) head=(ceat(); else {printf("链表已建立.\n"); k=1;}break; case 2: {if(n!=0) head=del(); else ss(); } break; case 3: {if(n!=0) head=insert(); else ss(); } break; case 4: print(head); break; defaulf: printf("请输入1-5的数\n"); printf("请输入你的操作选项"); scanf("%d",&i); } } 因为太长了!!不知有没有打错!!
|
hgs
|
呵呵~还可以啊~没仔细看~! 有三处少了:" 还有几处声明不对~ 那位有空仔细看下~ [此贴子已经被作者于2003-11-8 21:15:15编辑过]
|
JOHUA
|
那里不对啊!!哗!!我那天改了.越来越多错啊!!烦死了!!哈哈
|
JOHUA
|
hgs看来你也是一个编程高手啊!!有机会的话请多多指教 Thank you
|
hgs
|
呵呵~我还不是小菜~ 你在c环境下改错好后保存,然后把后缀是c的那个的后缀改为txt,再复制就不会出现打字错误了~! 我一般都在文本文件里编好再改后缀为c,再运行~ 有时间我定看,改好也定给你~主要是不太清楚你的思路,编的时候该/* */作些说明,看的吃力~
|
hgs
|
哎~今天空了仔细看了一下,我真的不知道你在想什么哦~除了改改变量名没什么改变,倒是语法错误一大堆~痛苦!
|
JOHUA
|
没有办法啊!!我笨啊,好难学啊!!哈哈!! 你可以骗条比我看看吗??
|
hgs
|
菜鸟~我!呵呵~刚过了二级c,高兴!找书编了下,还是有错(警告),不过没楼主那么多~ 大家有兴趣看看~提提意见~我想主要是main函数还是有问题~结构struct子程序的调用我看了很久,还不很熟悉~ #include <stdlib.h> struct node {int data; struct node *next; }; /*函数*creatlist()用来建立带头节点的单向链表,返回值为struct node型的指针,即链表的头指针*/ struct node *creatlist() {struct node *h,*p,*q; int a; /*申请动态内存存放头节点h*/ h=(struct node *)malloc(sizeof(struct node)); p=q=h; scanf("%d",&a); /*输入一整数,如果输入的是非0数,就进入不断将新节点添加在链表末尾的while循环*/ while(a!=0) {p=(struct node *)malloc(sizeof(struct node)); q->data=a; q->next=p; p=q; scanf("%d",&a); } p->next=NULL; return h; } /*find()函数用来找出要删除的节点*/ struct node *find(struct node *h,int x) {struct node *p,*q; p=h->next; q=h; /*将指针指向当前节点,q指向前一节点,如果当前节点不是链表末尾,其data域值也不是要查找的x,程序进入while循环*/ while(p!=NULL&&p->data!=x) /*while循环中,移动q和p,保证q在前,直到已达到末尾或已找到data域值为x的p节点,退出循环*/ {q=p; p=p->next; } if(p==NULL)return NULL; else return q; } /*del()用来将找到的节点删除,并释放被删除的节点所占用的储存空间*/ struct node *del(struct node *h,int x) {struct node *p,*q; if(h->next==NULL) {printf("List is null.\n"); return 0; } q=find(h,x); /*调用find函数找节点,并接收找到的节点的返回指针q*/ if(q!=NULL) {p=q->next; q->next=p->next; free(p); return 1; } else return 0; }/*如果节点存在,将q作当前指针,p指向要删除的节点,p->next指向下一节点,然后释放p节点空间,返回值1通知调用函数;若要删除的节点不存在就返回0*/ /*函数insert()用来插入新节点*/ insert(struct node *h,int x) {struct node *p,*q,*s; s=(struct node *)malloc(sizeof(struct node)); s->data=x; q=h; p=h->next; while(p!=NULL&&x>p->data) {q=p; p=p->next; } s->next=p; q->next=s; } /*函数printlist用来输出链表各节点data域中的数据*/ struct node *printlist(struct node *h) {struct node *p; p=h->next; while(p!=NULL) {printf("->%d ",p->data); p=p->next; } printf("\n"); } main() {struct node *head; /*声明头指针*head,用来接收creastlist链表头指针*/ int n,y,x; top: ; printf("\n**********************************\n"); printf("print in a NO. \n 1 TO creatlist\n 2 TO del node\n 3 TO insert node\n 4 TO printlist\n 5 TO quit system"); printf("\n**********************************\n"); scanf("%d",&n); switch(n) {case 1: head=creatlist();goto top; case 2: scanf("the numbuer you want to del x=%d",&x); y=del(head,x); if(y==1) /*del返回值为1则已删除*/ {printf("the code had been del");goto top;} else{printf("unexpert error the code undel");goto top;} case 3: scanf("the numbuer you want to insert x=%d",&x); insert(head,x);goto top; case 4: printlist(head);goto top; case 5: exit; default: printf("The NO. you print in must one of 1,2,3,4 and 5.");break; } }
|
hgs
|
不用谢我啦~还不是学习~而且还是有错的,能用还早,后面几个子程序的调用好象还没正确~ 不过还是发现点以前没遇到过的东西:switch如果写成swith(少了个c),编译的时候会在第一个case提醒main函数少了分号,害我找了好久~哈哈!
|
JOHUA
|
你有QQ吗?我现在也是在学紧C语言和JVAV有问题可以大家讨论一下啊!!哈哈!!] 我的QQ是45346171
|
hgs
|
以下是引用JOHUA在2003-11-14 22:26:00的发言: 你有QQ吗?我现在也是在学紧C语言和JVAV有问题可以大家讨论一下啊!!哈哈!!] 我的QQ是45346171
加了~呵呵!你东莞的啊~我想以后找工作很可能去那边哦~
|
JOHUA
|
可以啊!!如果你来的,有什么事的可以找我啊!!我是东莞寮步的,
|
JOHUA
|
好啊,大家多一点研究!!大家一起进步啊!!我也好高兴可以认到你们!!哈哈!! 想做朋友就加我的QQ吧!!45346171
|
上一篇:+++++++++关于cpu利用率滴c程序,各位c大... 下一篇:哪里有下vb6软件和vb6教程的?
|