链表的实现及对它的一些操作: #include < malloc.h > #define ERROR 2 #define OK 1 typedef int ElemType;typedef struct LNode ... { ElemType data; struct LNode *next;} LNode, * LinkList; // 初始化 LinkList ListInit() ... { LNode *base=(LinkList)malloc(sizeof(LNode)); base->data=0; base->next=NULL; return base;} // 插入一个元素 int ListInsert(LinkList L, int i,ElemType e) ... { LNode *p,*s; int j=0; p=(LNode *)L; while(p&&j<i-1) ...{ p=p->next; ++j; } if(!p||j>i-1) return ERROR; s=(LNode *)malloc(sizeof(LNode)); s->data=e; s->next=p->next; p->next=s; return OK;} // 查找一个元素 int GetElem(LinkList L, int i,ElemType * e) ... { LNode *p; int j=1; p=(LNode *)L->next; while(p&&j<i) ...{ p=p->next; ++j; } if(!p||j>i) return ERROR; *e=p->data; return OK;} // 倒置顺序 void Reverse_List(LNode * head) ... { LNode *p=head->next,*q; head->next=NULL; while(p) ...{ q=p->next; p->next=head->next; head->next=p; p=q; }} // 把最小的元素移到表首 void MoveMinFirst(LinkList head) ... { LNode *p,*q,*r; r=head; //r指向头结点 p=head->next; //p指向第一个结点 while(p->next) ...{ if(p->next->data<r->next->data) r=p; p=p->next; } if(r->next!=head->next) //不只一个元素 ...{ q=r->next; r->next=q->next; q->next=head->next; head->next=q; } } // 求最大值(递归算法) int GetMaxValue(LinkList head) ... { int temp; if(!head->next) return head->data; else ...{ temp=GetMaxValue(head->next); if(head->data>=temp) return head->data; else return temp; }} // 选择排序 void SelectSort(LinkList L) ... { LNode *p,*q,*r; int temp; p=L->next; while(p) ...{ q=p->next; r=p; //r指向最小的结点 while(q) ...{ if(q->data<r->data) r=q; q=q->next; } if(r!=p) ...{ temp=p->data; p->data=r->data; r->data=temp; } p=p->next; //p指向已排序的尾部 }} // 顺序输出 void Display(LinkList L) ... { LNode *p=L->next; while(p) ...{ printf("%d ,",p->data); p=p->next; }} // 倒序输出 void Reverse_OutPut(LNode * head) ... { if(head) ...{ Reverse_OutPut(head->next); printf("%d ,",head->data); }} int main( int argc, char * argv[]) ... { int a; LinkList La; La=ListInit(); ListInsert(La,1, 7); ListInsert(La,2, 9); ListInsert(La,3, 6); ListInsert(La,4, 3); ListInsert(La,5, 11); Display(La); printf(" "); Reverse_OutPut(La->next); printf(" "); Display(La); Reverse_List(La); printf(" after reverse... "); Display(La); SelectSort(La); printf(" after sort! "); Display(La); printf(" max value is:%d ",GetMaxValue(La->next)); printf(" after move! "); MoveMinFirst(La); Display(La); GetElem(La,3,&a); printf("a=%d",a); return 0;}