}
/**********
【题目】试写一算法,实现链队列的判空操作。 链队列的类型定义为:
typedef struct LQNode { ElemType data;
struct LQNode *next;
} LQNode, *QueuePtr; // 结点和结点指针类型 typedef struct {
QueuePtr front; // 队头指针 QueuePtr rear; // 队尾指针 } LQueue; // 链队列类型 ***********/
Status QueueEmpty_LQ(LQueue Q)
/* 判定链队列Q是否为空队列。 */ /* 若Q是空队列,则返回TRUE,否则FALSE。*/ {
if(Q.front==NULL) return TRUE; else return FALSE; }
/**********
【题目】试写一算法,实现链队列的求队列长度操作。 链队列的类型定义为:
typedef struct LQNode { ElemType data;
struct LQNode *next;
} LQNode, *QueuePtr; // 结点和结点指针类型 typedef struct {
QueuePtr front; // 队头指针 QueuePtr rear; // 队尾指针 } LQueue; // 链队列类型 ***********/
int QueueLength_LQ(LQueue Q)
/* 求链队列Q的长度并返回其值 */ { if(Q.front==NULL) return 0; int i=1;
QueuePtr p; p=Q.front;
while(p!=Q.rear){ p=p->next; i++; }
return i;
}
/**********
【题目】假设以带头结点的循环链表表示队列,并且 只设一个指针指向队尾元素结点(注意不设头指针), 试编写相应的队列初始化、入队列和出队列的算法。 带头结点循环链队列CLQueue的类型定义为: typedef struct LQNode { ElemType data;
struct LQNode *next; } LQNode, *CLQueue; **********/
Status InitCLQueue(CLQueue &rear) // 初始化空队列 {
rear=(LQNode*)malloc(sizeof(LQNode)); if(rear==NULL) return ERROR; rear->next=rear; return OK; }
Status EnCLQueue(CLQueue &rear, ElemType x) // 入队 { CLQueue p;
p=(LQNode*)malloc(sizeof(LQNode)); if(p==NULL) return ERROR; p->data=x;
p->next=rear->next; rear->next=p; rear=p; return OK; }
Status DeCLQueue(CLQueue &rear, ElemType &x) // 出队 {CLQueue p,t; t=rear->next;
if(t==rear) return ERROR; p=t->next; x=p->data;
t->next=p->next; free(p);
return OK; }
/**********
【题目】试写一算法,实现带头结点单链表的判空操作。
单链表的类型定义为: typedef struct LNode { ElemType data; struct LNode *next;
} LNode, *LinkList; // 结点和结点指针类型 ***********/
Status ListEmpty_L(LinkList L)
/* 判定带头结点单链表L是否为空链表。 */ /* 若L是空链表,则返回TRUE,否则FALSE。*/ {if(L->next==NULL) return TRUE; else return FALSE; }
/**********
【题目】试写一算法,实现带头结点单链表的销毁操作。 单链表的类型定义为: typedef struct LNode { ElemType data; struct LNode *next;
} LNode, *LinkList; // 结点和结点指针类型 ***********/
Status DestroyList_L(LinkList &L)
/* 销毁带头结点单链表L,并返回OK。*/ { LinkList p; p=L->next;
while(p!=NULL){ L->next=p->next; free(p); p=L->next; } free(L); return OK; }
/**********
【题目】试写一算法,实现带头结点单链表的清空操作。
单链表的类型定义为: typedef struct LNode { ElemType data; struct LNode *next;
} LNode, *LinkList; // 结点和结点指针类型 ***********/
Status ClearList_L(LinkList &L)
/* 将带头结点单链表L置为空表,并返回OK。*/ /* 若L不是带头结点单链表,则返回ERROR。 */ { if(L==NULL) return FALSE; LinkList p; p=L->next;
while(p!=NULL){ L->next=p->next; free(p); p=L->next; }
return OK; }
/**********
【题目】试写一算法,实现带头结点单链表的求表长度操作。 单链表的类型定义为: typedef struct LNode { ElemType data; struct LNode *next;
} LNode, *LinkList; // 结点和结点指针类型 ***********/
int ListLength_L(LinkList L)
/* 求带头结点单链表L的长度,并返回长度值。*/ /* 若L不是带头结点单链表,则返回-1。 */ { int i=0; LinkList p;
if(L==NULL) return -1; p=L->next;
while(p!=NULL){ p=p->next; i++; } return i; }
/**********
【题目】试写一算法,在带头结点单链表L插入第i元素e。 带头结点单链表的类型定义为: typedef struct LNode { ElemType data; struct LNode *next; } LNode, *LinkList; **********/
Status Insert_L(LinkList L, int i, ElemType e)
/* 在带头结点单链表L插入第i元素e,并返回OK。*/ /* 若参数不合理,则返回ERROR。 */ { int j;
LinkList p,t=L;
if(i<=0) return ERROR; if(L==NULL) return ERROR;
p=(LNode*)malloc(sizeof(LNode)); if(p==NULL) return ERROR; for(j=1;jnext;
if(t==NULL) return ERROR; }
p->data=e;
p->next=t->next; t->next=p; return OK; }
/**********
【题目】试写一算法,在带头结点单链表删除第i元素到e。 带头结点单链表的类型定义为: typedef struct LNode { ElemType data; struct LNode *next; } LNode, *LinkList; **********/
Status Delete_L(LinkList L, int i, ElemType &e)
/* 在带头结点单链表L删除第i元素到e,并返回OK。*/ /* 若参数不合理,则返回ERROR。 */ { int j;
LinkList p,t=L;
if(i<=0) return ERROR;
if(L->next==NULL||L==NULL) return ERROR; for(j=1;jnext;
if(t->next==NULL) return ERROR; }
p=t->next; e=p->data;
t->next=p->next; free(p);
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库2015广工数据结构答案(4)在线全文阅读。
相关推荐: