襄阳城 发表于 2010-3-31 13:32:13

线性表 程序纠错

<p>线性表 程序纠错</p>
<p><img src="http://img.baidu.com/img/iknow/icn_point.gif"> 悬赏分:0 -</p>
<p>解决时间:2010-3-31 13:25</p>
<p>下面是程序,其他功能都对的,就是一开始建表是,比如输入3(长度),和(1 2 3)元素值;但此时打印出来却是“3 2 1”,顺序反了,怎么改呢?</p>
<p>#include "stdio.h"</p>
<p>#include "stdlib.h"</p>
<p>#define ERROR 0</p>
<p>#define OK 0</p>
<p>typedef int Elemtype;</p>
<p>typedef int status;</p>
<p>typedef struct LNode{</p>
<p>Elemtype date;</p>
<p>struct LNode *next;</p>
<p>}LNode,*LinkList;</p>
<p>//建立链表</p>
<p>void CreateList(LinkList &L){</p>
<p>LinkList p;int i,n;</p>
<p>printf("请输入要建立链表的长度\n");</p>
<p>scanf("%d",&n);</p>
<p>L=(LinkList)malloc(sizeof(LNode));</p>
<p>L->next=NULL;</p>
<p>for(i=n;i>0;--i){</p>
<p>p=(LinkList)malloc(sizeof(LNode));</p>
<p>scanf("%d",&p->date);</p>
<p>p->next=L->next;L->next=p;</p>
<p>}</p>
<p>}</p>
<p>//输出链表</p>
<p>void PrintList(LinkList L){</p>
<p>LinkList p;</p>
<p>for(p=L->next;p;p=p->next)</p>
<p>printf("%5d",p->date);</p>
<p>}</p>
<p>//在i位置插入元素e</p>
<p>status ListInsert(LinkList &L,int i,Elemtype e){</p>
<p>LinkList p,s;int j;</p>
<p>p=L;j=0;</p>
<p>while(p&&j<i-1){p=p->next;++j;}</p>
<p>if(!p&#73;&#73;j>i-1)return ERROR;</p>
<p>s=(LinkList)malloc(sizeof(LNode));</p>
<p>s->date=e;s->next=p->next;</p>
<p>p->next=s;</p>
<p>return OK;</p>
<p>}</p>
<p>//删除第i个元素</p>
<p>status ListDelete(LinkList &L,int i,Elemtype &e){</p>
<p>LinkList p,q;int j;</p>
<p>p=L;j=0;</p>
<p>while(p->next&&j<i-1){p=p->next;++j;}</p>
<p>if(!(p->next)&#73;&#73;j>i-1) return ERROR;</p>
<p>q=p->next;p->next=q->next;</p>
<p>e=q->date;free(q);</p>
<p>return OK;</p>
<p>}</p>
<p>void main(){</p>
<p>LinkList L;Elemtype e;int i,n;</p>
<p>CreateList(L);</p>
<p>PrintList(L);</p>
<p>printf("\n输入1则插入元素,输入2则删除元素\n");</p>
<p>scanf("%d",&n);</p>
<p>switch(n){</p>
<p>case 1:</p>
<p>printf("请输入要插入元素的位置");scanf("%d",&i);</p>
<p>printf("请输入要插入的元素");scanf("%d",&e);</p>
<p>ListInsert(L,i,e);</p>
<p>PrintList(L);break;</p>
<p>case 2:</p>
<p>printf("请输入要删除元素的位置");scanf("%d",&i);</p>
<p>ListDelete(L,i,e);</p>
<p>PrintList(L);}</p>
<p>}</p>
<p>提问者: 0o地暴天星o0 - 一级</p>
<p>最佳答案</p>
<p>#include "stdio.h"</p>
<p>#include "stdlib.h"</p>
<p>#define ERROR 0</p>
<p>#define OK 0</p>
<p>typedef int Elemtype;</p>
<p>typedef int status;</p>
<p>typedef struct LNode{</p>
<p>Elemtype date;</p>
<p>struct LNode *next;</p>
<p>}LNode,*LinkList;</p>
<p>//建立链表</p>
<p>void CreateList(LinkList &L){</p>
<p>LinkList p,r;int i,n;//add r,</p>
<p>printf("请输入要建立链表的长度\n");</p>
<p>scanf("%d",&n);</p>
<p>L=(LinkList)malloc(sizeof(LNode));</p>
<p>L->next=NULL;</p>
<p>r=L;// 开始指向头结点。</p>
<p>for(i=n;i>0;--i){</p>
<p>p=(LinkList)malloc(sizeof(LNode));</p>
<p>scanf("%d",&p->date);</p>
<p>r->next=p;//将*p插入*r之后。</p>
<p>r=p;</p>
<p>}</p>
<p>r->next=NULL;</p>
<p>}</p>
<p>//输出链表</p>
<p>void PrintList(LinkList L){</p>
<p>LinkList p;</p>
<p>for(p=L->next;p;p=p->next)</p>
<p>printf("%5d",p->date);</p>
<p>}</p>
<p>//在i位置插入元素e</p>
<p>status ListInsert(LinkList &L,int i,Elemtype e){</p>
<p>LinkList p,s;int j;</p>
<p>p=L;j=0;</p>
<p>while(p&&j<i-1){p=p->next;++j;}</p>
<p>if(!p&#73;&#73;j>i-1)return ERROR;</p>
<p>s=(LinkList)malloc(sizeof(LNode));</p>
<p>s->date=e;s->next=p->next;</p>
<p>p->next=s;</p>
<p>return OK;</p>
<p>}</p>
<p>//删除第i个元素</p>
<p>status ListDelete(LinkList &L,int i,Elemtype &e){</p>
<p>LinkList p,q;int j;</p>
<p>p=L;j=0;</p>
<p>while(p->next&&j<i-1){p=p->next;++j;}</p>
<p>if(!(p->next)&#73;&#73;j>i-1) return ERROR;</p>
<p>q=p->next;p->next=q->next;</p>
<p>e=q->date;free(q);</p>
<p>return OK;</p>
<p>}</p>
<p>void main(){</p>
<p>LinkList L;Elemtype e;int i,n;</p>
<p>CreateList(L);</p>
<p>PrintList(L);</p>
<p>printf("\n输入1则插入元素,输入2则删除元素\n");</p>
<p>scanf("%d",&n);</p>
<p>switch(n){</p>
<p>case 1:</p>
<p>printf("请输入要插入元素的位置");scanf("%d",&i);</p>
<p>printf("请输入要插入的元素");scanf("%d",&e);</p>
<p>ListInsert(L,i,e);</p>
<p>PrintList(L);break;</p>
<p>case 2:</p>
<p>printf("请输入要删除元素的位置");scanf("%d",&i);</p>
<p>ListDelete(L,i,e);</p>
<p>PrintList(L);}</p>
<p>}</p>
<p>0</p>
<p>回答者:</p>
<p>lizard1861 - 六级   2010-3-31 12:55</p>
<p>我来评论>></p>
<p>提问者对于答案的评价:</p>
<p>谢~</p>
页: [1]
查看完整版本: 线性表 程序纠错