Anyview 第四章 15年数据结构 下载本文

{

Append_Sq1(La,e); La.length++; } i++; } }

DS04-PE38 /**********

【题目】假设以带头结点的循环链表表示队列,并且 只设一个指针指向队尾元素结点(注意不设头指针), 试编写相应的队列初始化、入队列和出队列的算法。 带头结点循环链队列CLQueue的类型定义为: typedef struct LQNode { ElemType data;

struct LQNode *next; } LQNode, *CLQueue; **********/

Status InitCLQueue(CLQueue &rear) // 初始化空队列 {

rear=(CLQueue)malloc(sizeof(LQNode)); if( NULL==rear ) return ERROR; rear->next=rear; return OK; }

Status EnCLQueue(CLQueue &rear, ElemType x) // 入队 {

LQNode *p;

p=(LQNode*)malloc(sizeof(LQNode)); if( NULL==p ) return ERROR; p->data=x; p->next=rear->next; rear->next=p; rear=p; return OK; }

Status DeCLQueue(CLQueue &rear, ElemType &x) // 出队 {

if( rear->next==rear ) return ERROR; CLQueue p;

p=rear->next->next; x=p->data; if( p==rear ) {

rear=rear->next; rear->next=p; } else {

rear->next->next=p->next; }

return OK; }

DS04-PE62 /**********

【题目】试写一算法,在带头结点单链表L插入第i元素e。 带头结点单链表的类型定义为: typedef struct LNode { ElemType data; struct LNode *next; } LNode, *LinkList; **********/

int LengthLinkList(LinkList L) {

LinkList p=L; int length=0; while( p->next ) {

length++; p=p->next; }

return length; }

Status Insert_L(LinkList L, int i, ElemType e)

/* 在带头结点单链表L插入第i元素e,并返回OK。*/ /* 若参数不合理,则返回ERROR。 */ {

if( NULL==L ) return ERROR; int length=LengthLinkList(L);

if( i>length+1||i==0 ) return ERROR; LinkList p=L; LinkList q;

q=(LNode*)malloc(sizeof(LNode));

if( NULL==q ) return ERROR; int a=0; q->data=e;

if( i==length+1 ) {

while(a++next; p->next=q; } else {

while( a++next; q->next=p->next; p->next=q; }

return OK; }

DS04-PE64 /**********

【题目】试写一算法,在带头结点单链表删除第i元素到e。 带头结点单链表的类型定义为: typedef struct LNode { ElemType data; struct LNode *next; } LNode, *LinkList; **********/

int LengthLinkList(LinkList L) {

LinkList p=L; int length=0; while( p->next ) {

length++; p=p->next; }

return length; }

Status Delete_L(LinkList L, int i, ElemType &e)

/* 在带头结点单链表L删除第i元素到e,并返回OK。*/ /* 若参数不合理,则返回ERROR。 */ {

int length=LengthLinkList(L);

if( NULL==L || i==0 || i>length ) return ERROR; LinkList p; p=L; if( i==length ) {

while(--i>0) p=p->next; e=p->next->data; p->next=NULL; } else {

while(--i>0) p=p->next; e=p->next->data;

p->next=p->next->next; }

return OK; }

DSO4-PE66 /**********

【题目】试写一算法,在带头结点单链表的第i元素起的 所有元素从链表移除,并构成一个带头结点的新链表。 带头结点单链表的类型定义为: typedef struct LNode { ElemType data; struct LNode *next; } LNode, *LinkList; **********/

int LengthLinkList(LinkList L) {

LinkList p=L; int length=0; while( p->next ) {

length++; p=p->next; }

return length; }

Status Split_L(LinkList L, LinkList &Li, int i)

/* 在带头结点单链表L的第i元素起的所有元素 */ /* 移除,并构成带头结点链表Li,返回OK。 */

/* 若参数不合理,则Li为NULL,返回ERROR。 */ {

if( NULL==L || i==0 ) return ERROR; int length=LengthLinkList(L); if( i>length ) {

Li=NULL; return ERROR; }

Li=(LNode*)malloc(sizeof(LNode)); if( NULL==Li ) return ERROR; LinkList p=L; while(--i>0) p=p->next; Li->next=p->next; p->next=NULL; return OK; }

DS04-PE68 /**********

【题目】试写一算法,在带头结点单链表删除第i元素 起的所有元素。

带头结点单链表的类型定义为: typedef struct LNode { ElemType data; struct LNode *next; } LNode, *LinkList; **********/

int LengthLinkList(LinkList L) {

LinkList p=L; int length=0; while( p->next ) {

length++; p=p->next; }

return length; }

Status Cut_L(LinkList L, int i)

/* 在带头结点单链表L删除第i元素起的所有元素,并返回OK。*/