赞
踩
参考书:《数据结构(C语言)》–严蔚敏等编著,清华大学出版社。
如图:若线性链表初始化为:1,2,3,4,5
从第2个位置进行元素转置步骤:转置后的元素应为:1,5,4,3,2
(1)建立Pre指针指向1,Cur指向Pre的next(2),Next指针指向Cur的next(3);
(2)第一次循环步骤如图:
Cur->next = Next->next;
Next->next = Pre->next;
Pre->next = Next;
Next = Cur->next;
(3)第二次循环如图:Cur指向的位置不变;Pre指向的位置不变
(4)第三次循环如图:Cur指向的位置不变;Pre指向的位置不变
Next指向NULL,循环结束;
相关代码:
#include "stdio.h" #include "stdlib.h" //#include "LinkList.h" #define OK 1 #define ERROR 0 #define TRUE 1 #define FLASE 0 #define OVERFLOW -2 #define MAX_LIST_SIZE 100 #define LISTINCREMENT 10 typedef int Status; typedef int ElemType; typedef struct LNode { ElemType data; //数据域(信息域) struct LNode *next; //指针域 } LNode, *LinkList; Status CreateList_L(LinkList &L,int n); //构造有n个元素的有头结点的链表L Status CreateList_L(LinkList &L,int n) { LinkList p,q; int i; L = (LinkList) malloc (sizeof(LNode)); if(L==NULL) exit(OVERFLOW); L->next = NULL; q=L; //起初为L(头)---->NULL for(i=1; i<=n; i++) { p = (LinkList) malloc (sizeof(LNode)); //scanf("%d",p->data); p->data = i; //将i值赋给p q->next = p; //q的next指向p p->next = NULL; //p的next指向NULL q = q->next; //q后移 } return OK; } Status ListTrans_L(LinkList &L,int i); //在链表中从第 i个位置起进行元素转置 Status ListTrans_L(LinkList &L,int i) { if(i<=0 || i>=5) return ERROR; LinkList trans = (LinkList) malloc (sizeof(LNode)); if(!trans) exit(OVERFLOW); trans=L; LNode *Pre=trans; for(int n=0; n<i-1; n++){ Pre=Pre->next; //指针后移直至指向i-1处 } LNode* Cur=Pre->next; //记录当前Cur LNode* Next=Cur->next; //记录后继Next while (Next!=NULL){ Cur->next = Next->next; Next->next = Pre->next; Pre->next = Next; Next = Cur->next; } return OK; } Status ListDisPlay_L(LNode *L); //打印链表 Status ListDisPlay_L(LNode *L) { LNode *p; p = L->next; //p指向头结点 if(p == NULL) exit(OVERFLOW); else { while(p != NULL) { if(p->next != NULL) printf("%d,",p->data); else { printf("%d",p->data); } p = p->next; //p指针后移 } } } int main(void) { LinkList L; CreateList_L(L,5); int i; scanf("%d",&i); if(ListTrans_L(L,i)) ListDisPlay_L(L); else printf("转置位置非法\n"); return 0; } /* 使用单链表存储结构,实现链表的转置操作, 给出开始转置的位置,输出转置后线性表的元素。 如果转置位置不合法则输出:转置位置非法。 初始化线性表为:1,2,3,4,5 如: 输入:1 输出:5,4,3,2,1 输入:3 输出:1,2,5,4,3 输入:-4 输出:转置位置非法 */
实现:
实现:
初始链表: 1,2,3,4,5
在第2的位置起开始转置:
在第6的位置起开始转置:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。