相关链表操作--简立,逆转,排序,输出
有关链表的建立和逆转在这里就不在多说了,主要是强调一下链表的排序,链表的排序实现几乎和数组的排序几乎一致,仅仅比较和交换链表的关键值比较简单。下面是我实现的几个小程序:
- #include <stdio.h>
#include <stdlib.h>
typedef struct listNode
{
struct listNode *link;
int data;
}*node;
//creat a new node
node getNode(node newNode,int val )
{
if(!newNode)
exit(0);
newNode->link=NULL;
newNode->data=val;
return newNode;
}
// insert a new node into the linklist
int insertNode(node prev,node newNode)
{
if(!newNode) return 0;
newNode->link=prev->link;
prev->link=newNode;
return 1;
}
void buildList(node head)
{
int value;
node newNode=(node)malloc(sizeof(node));
node p=head;
scanf("%d",&value);
// input the value of node in the new linklist
while(value!=-1)
{
newNode=getNode(newNode,value);
insertNode(p,newNode);
p=p->link;//p link to the last node
scanf("%d",&value);
newNode=(node)malloc(sizeof(node));
}
}
//reverse the linkList
void reverseList(node head)
{
node p=head->link;
node q=p->link;
node temp;
// check the linkList is empty
if(p==NULL)
{
printf("The list is empty!\n");
}
p->link=NULL;
while(q!=NULL)
{
temp=q->link;
q->link=p;
p=q;
q=temp;
}
head->link=p;
}
//选择排序
void sortList(node head)
{
node p=head->link;
node q=p->link;
node r;
int temp=0;
bool flag;
while(p->link!=NULL)
{
r=p;
flag=false;
while(q!=NULL)
{
if(r->data>q->data)
{
r=q;
flag=true;
}
q=q->link;
}
if(flag)
{
temp=p->data;
p->data=r->data;
r->data=temp;
}
p=p->link;
q=p->link;
}
}
void swap(node p,node q)
{
int temp;
temp=p->data;
p->data=q->data;
q->data=temp;
}
//冒泡排序
void pupleSortLink(node head)
{
node p=head->link;//列表的第一个节点
node q=p; //q滑动比较各个节点和其相邻节点
node r=NULL;//记录有序序列的首个节点
bool flag;
while(p->link!=r)
{
while(q->link!=r)
{
if(q->data>(q->link)->data)
{
swap(q,q->link);
flag=true;
}
q=q->link;
}
if(flag)
{
r=q;
}
else
break;
q=p;
}
}
// print the value of node in the reversed linkList
void print(node head)
{
node p=head->link;
while(p!=NULL)
{
printf("%d\n",p->data);
p=p->link;
}
system("pause");
}
int main(void)
{
node head=(node)malloc(sizeof(node));
head=getNode(head,0);
buildList(head);
// print(head);
// sortList(head);
pupleSortLink(head);
print(head);
}
posted on 2009-10-16 10:36 Creative Common 阅读(281) 评论(0) 编辑 收藏 举报