#include <iostream>
#include <stdlib.h>
#include <malloc.h>
typedef struct lnode
{
int data;
struct lnode *next;
}LNode,*linklist;
void creatlink1(linklist head)
{
/*线性链表顺序的创建*/
cout<<"线性链表的顺序输入:"<<endl;
linklist p,q;
char c;/当输入#号表链表输入结点结束
q=head;
cin>>c;
while(c!='#')
{
p=(linklist)malloc(sizeof(LNode));
cin>>p->data;
q->next=p;
q=p;
cin>>c;
}
p->next=NULL;
}creatlink1
void creatlink2(linklist head)
{ /*线性链表逆序的创建*/
cout<<"线性链表的逆序输入:"<<endl;
linklist p;
char c;当输入字符为#时,表示链表结点结束
head->next=NULL;
cin>>c;
while(c!='#')
{
p=(linklist)malloc(sizeof(LNode));
cin>>p->data;
p->next=head->next;
head->next=p;
cin>>c;
}
}//creatlink2
void sortlink(linklist head)
{/*单链表的选择排序*/
linklist p,q,r,s,t,sit;
s=head;
p=s->next;
while(p!=NULL)
{
t=p;
sit=p;
for(q=p->next;q!=NULL;q=q->next)
{
if(q->data<p->data) {r=t;sit=q;}
t=q;
}
if(sit!=p)
{
s->next=sit;
r->next=sit->next;
sit->next=p;
}
s=p;
p=p->next;
}
}end of sortlink
void reverseorderprint(linklist head)
{
linklist p,q,r;
p=head;
for(q=p->next;q!=NULL;q=r)
{
r=q->next;
if(p==head) q->next=NULL;
else
q->next=p;
if(r==NULL) head->next=q;
p=q;
}
}
void printlink(linklist head)
{
/*线性链表的输出*/
linklist p=head->next;
while(p!=NULL)
{
cout<<p->data;
p=p->next;
}
}
int main(int argc, char *argv[])
{
linklist head;
//linklist p;
head=(linklist)malloc(sizeof(LNode));
int k;/用于选择创建链表的方式,0表顺序创建,1表逆序创建
cout<<"请选择你创建链表的方式:"<<endl;
cin>>k;
if(k==0)
creatlink1(head);
else
creatlink2(head);
cout<<"初始链表的数据为:"<<endl;
printlink(head);
sortlink(head);
cout<<"排序后的链表数据为:"<<endl;
printlink(head);
reverseorderprint(head);
cout<<"倒序输出的链表数据为:"<<endl;
printlink(head);
system("PAUSE");
return 0;
}
其实重新写下数据结构中的程序的想法早就有,只是最近不知道是不是自己真的太忙了(还是自己
给自己的借口),感觉自己的任务又停了好久,现在开始一点点算一点吧。只是之前想到了些关于
链表的操作,但并没有实践,也许它真的只是很麻烦的,自认为自己是个很怕麻烦的。今天还是写
了下,从中发现了很多问题,特别是做到排序时,不知道自己怎么搞的,当用到插入法排序时就只
能对链表做一次排序,看了好久也没看出哪出问题了,不知道卡在哪了,最后还是改用了选择排
序。其它的排序没想了……
代码如下:void sortlink(linklist head)
{
/*单链表的排序*/
linklist p,q,r;
int flag1=0,flag2;
p=head->next;
r=head;
q=p=head->next;
while(p!=NULL)
{
flag1=1;
flag2=1;
q=p->next;
if(p->data>q->data)
{
if(q->next==NULL)
{
r->next=q;
q->next=p;
p->next=NULL;
flag2=0;
}
else
{
p->next=q->next;
q->next=p;
r->next=q;
}
flag1=0;
}
if(flag2==0) break;
if(flag1==1) {r=p;p=p->next; }
else r=q;
// p=p->next;
}while
}///sortlink
望高手指点。。没想明白。。
做这些小小程序只是为了让自己更了解一些结构,同时也可以提高自己的一点自信嘛,慢慢
来,这是对自己常说的一句了。