第4章
//03****************************************************************** /**********
【题目】试写一算法,实现链栈的判空操作。 链栈的类型定义为: typedef struct LSNode {
ElemType data; // 数据域 struct LSNode *next; // 指针域
} LSNode, *LStack; // 结点和链栈类型 ***********/
Status StackEmpty_L(LStack S)
/* 对链栈S判空。若S是空栈,则返回TRUE;否则返回FALSE */ {
if(NULL == S) return TRUE; else
return FALSE; }
//05****************************************************************** /**********
【题目】试写一算法,实现链栈的取栈顶元素操作。 链栈的类型定义为: typedef struct LSNode {
ElemType data; // 数据域 struct LSNode *next; // 指针域
} LSNode, *LStack; // 结点和链栈类型 ***********/
Status GetTop_L(LStack S, ElemType &e) /* 取链栈S的栈顶元素到e,并返回OK; */ /* 若S是空栈,则失败,返回ERROR。 */ {
if(NULL == S)
return ERROR; else
e = S->data; return OK; }
//31****************************************************************** /**********
【题目】试写一算法,实现链队列的判空操作。 链队列的类型定义为:
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(NULL == Q.front&&NULL ==Q.rear) return TRUE; else
return FALSE; }
//33****************************************************************** /**********
【题目】试写一算法,实现链队列的求队列长度操作。 链队列的类型定义为:
typedef struct LQNode { ElemType data;
struct LQNode *next;
} LQNode, *QueuePtr; // 结点和结点指针类型 typedef struct {
QueuePtr front; // 队头指针 QueuePtr rear; // 队尾指针 } LQueue; // 链队列类型 ***********/
int QueueLength_LQ(LQueue Q)
/* 求链队列Q的长度并返回其值 */ {
int i = 0;
while(Q.front != NULL) {
Q.front = Q.front->next; i++; }
return i;
}
//38****************************************************************** /**********
【题目】假设以带头结点的循环链表表示队列,并且 只设一个指针指向队尾元素结点(注意不设头指针), 试编写相应的队列初始化、入队列和出队列的算法。 带头结点循环链队列CLQueue的类型定义为: typedef struct LQNode { ElemType data;
struct LQNode *next; } LQNode, *CLQueue; **********/
Status InitCLQueue(CLQueue &rear) // 初始化空队列 {
// LQNode *q;
rear = (LQNode*)malloc(sizeof(LQNode)) ; if(NULL == rear)
return OVERFLOW; rear->next = rear; return OK; }
Status EnCLQueue(CLQueue &rear, ElemType x) // 入队 {
LQNode *q;
q = (LQNode*)malloc(sizeof(LQNode)) ; q->data =x;
q->next = rear->next; rear->next = q; rear = q; return OK; }
Status DeCLQueue(CLQueue &rear, ElemType &x) // 出队 {
if(rear == rear->next ) return ERROR; else {
x = rear->next->next->data;
rear->next->next = rear->next->next->next;
} return OK; }
//51****************************************************************** /**********
【题目】试写一算法,实现带头结点单链表的判空操作。
单链表的类型定义为: typedef struct LNode { ElemType data; struct LNode *next;
} LNode, *LinkList; // 结点和结点指针类型 ***********/
Status ListEmpty_L(LinkList L)
/* 判定带头结点单链表L是否为空链表。 */ /* 若L是空链表,则返回TRUE,否则FALSE。*/ {
if(NULL == L->next) return TRUE; else
return FALSE; }
//53****************************************************************** /**********
【题目】试写一算法,实现带头结点单链表的销毁操作。 单链表的类型定义为: typedef struct LNode { ElemType data; struct LNode *next;
} LNode, *LinkList; // 结点和结点指针类型 ***********/
Status DestroyList_L(LinkList &L)
/* 销毁带头结点单链表L,并返回OK。*/ {
if(NULL == L->next ) {
free(L); return OK; } else
while(NULL != L)
{
LNode *q; q = L->next;
L->next = q->next;
if(q->next == NULL) L = NULL;
free(q);
}
free(L); return OK; }
//55******************************************************************
/**********
【题目】试写一算法,实现带头结点单链表的清空操作。
单链表的类型定义为: typedef struct LNode { ElemType data; struct LNode *next;
} LNode, *LinkList; // 结点和结点指针类型 ***********/
Status ClearList_L(LinkList &L)
/* 将带头结点单链表L置为空表,并返回OK。*/ /* 若L不是带头结点单链表,则返回ERROR。 */ {
if(NULL == L) return ERROR; //当L是非空不带结点单链表呢? while(NULL != L->next) {
LinkList q; q = L->next;
L->next = q->next;
// if(q->next == NULL) free(q); }
return OK; }
//57******************************************************************
/**********
【题目】试写一算法,实现带头结点单链表的求表长度操作。
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库广工数据结构anyview答案在线全文阅读。
相关推荐: