{
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++
while( a++
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。*/