数据结构算法设计题及答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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; }