数据结构算法设计题及答案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构算法设计题及答案

1、对带表头结点的有序单链表,编写算法向单链表中插入元素x,使其保持有序。

答案:

typedef datatype int;

struct node //结点结构

{ datatype data;

node * next;

};

//注:也可以用自然语言描述

void insertOrder(node *head, datatype x) //统计

{ node *s;

p=head;

while (p->next ->data

p=p->next;

s=( node *)malloc(sizeof(node)) ;

s->data=x;

s->next= p->next;

p->next=s;

}

2、对带表头结点的单链表,编写算法求单链表的长度。

答案:

typedef datatype int;

struct node //结点结构

{ datatype data;

node * next;

};

//注:也可以用自然语言描述

int Length(node *head) // 求单链表的长度

{ int num=0;

node *p=head->next;

while (p)

{

num++ ;

p=p->next;

}

return num;

}

3、试写出单链表的插入与删除算法,并用C编写相应的程序。

答案:

typedef datatype int;

struct node //结点结构

{ datatype data;

node * next;

};

单链表的插入参考算法:

//在包含元素x的结点前插入新元素b

void ins_linked_LList(node * head , datatype x, datatype b) { node *p, *q;

p=new node ;//申请一个新结点

p->d=b;//置新结点的数据域

if (head==NULL)//原链表为空

{ head=p; p->next=NULL; return;}

if (head->d==x)//在第一个结点前插入

{ p->next=head;head=p;return; }

q=head;

while ((q->next!=NULL)&&(((q->next)->d)!=x))

q=q->next;//寻找包含元素x的前一个结点q

p->next=q->next;

q->next=p;//新结点p插入到结点q之后

return;

}

单链表的删除参考算法:

int del_linked_LList(node * head ,T x) //删除包含元素x的结点元素{ node *p, *q;

if (head==NULL) return(0); //链表为空,无删除的元素

if ((head->d)==x)//删除第一个结点

{ p=head->next; delete head; head=p; return(1); }

q=head;

while ((q->next!=NULL)&&(((q->next)->d)!=x))

q=q->next;//寻找包含元素x的前一个结点q

if (q->next==NULL)

return(0); //链表中无删除的元素

p=q->next; q->next=p->next;//删除q的下一个结点p

delete p;//释放结点p的存储空间

return(1);

}

4、对带表头结点的单链表,编写算法统计单链表中大于x的元素个数。

答案:

typedef datatype int;

struct node //结点结构

{ datatype data;

node * next;

};

//注:也可以用自然语言描述

int CountX(node *head, datatype x) //统计

{ int num=0;

p=head->next;

while (p)

{

if(p->data>x) num++ ;

p=p->next;

}

return num;

} 5、对带表头结点的单链表,编写算法将单链表就地逆置。

答案:

typedef datatype int;

struct node //结点结构

{ datatype data;

node * next;

};

//注:也可以用自然语言描述

void ReverseList(node *head) // 将单链表就地逆置

{

node *q, *p=head->next;

head->next=NULL;

while (p)

{

q=p;

p=p->next;

q->next= head->next;

head->next=q ;

}

}

6、写出链队列的入队、出队的算法。

答案:

typedef datatype int;

struct node //结点结构

{ datatype data;

node * next;

};

//注:也可以用自然语言描述

struct LinkQueue //结点结构

{ node * front;

node * rear;

};

int EnterQueue(LinkQueue *q, datatype e)

{ //带头结点的链队列入队

q->rear->next=( node *)malloc(sizeof(node));

q->rear->data=e;

q->rear= q->rear->next;

return 1;

}

int DeleteQueue(LinkQueue *q, datatype *e)

{ //带头结点的链队列出队

if(q->rear== q->front) return 0;

p= q->front->next;

*e= p->data;

q->front->next=p->next;

free(p);

if(q->front->next==NULL)

q->rear= q->front;

return 1;

}

相关文档
最新文档