您的位置:首页 > 职场人生

面试(一)

2016-06-05 16:41 429 查看
/*

面试(一)

开发环境:Visual Studio 2008

开发语言:C语言

要 求:使用C语言(不带头结点)单向链表模拟STL中的ForwardList大致功能。

时 间:15-20分钟

得分标准:
1.建立链表(5分)
2.输出链表(5分)
3.释放链表(10分)
4.链表头部插入(10分)
5.链表尾部插入(10分)
6.链表头部删除(10分)
7.链表尾部删除(10分)
8.链表排序(通过指针实现)(30分)
9.口述算法

考核标准:
1.建立(不带头结点)单向链表后,未释放结点空间。(0分)
2.口述算法思路不清晰者(0分)
3.无错误模拟push_front()、push_back()、pop_front()、pop_back(),其中函数名称与STL名称一致的可适当加分。
4.无错误模拟sort(),并通过指针排序直接加分(数据交换排序不得分,错误扣分)。

考核小组:张一涛

批注评语:forwardlist容器是没有push_back()和pop_back()操作的。请查看《C++标准库第2版》侯捷 【译】第306页,有关forwardlist容器使用及说明,请参考《C++标准库第2版》的第300页至第313页。


*/

#include <stdio.h>
#include <stdlib.h>
#define scanf scanf_s

typedef struct LinkList
{
int data;
struct LinkList *next;
}ForwardList;

ForwardList *Create()
{
ForwardList *p,*h=NULL;
p=(ForwardList *)malloc(sizeof(ForwardList));
scanf("%d",&p->data);
while(p->data!=0)
{
p->next=h;
h=p;
p=(ForwardList *)malloc(sizeof(ForwardList));
scanf("%d",&p->data);
}
return (h);
}

void Show(ForwardList *h)
{
ForwardList *p;
p=h;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}

void Clear(ForwardList *h)
{
ForwardList *p;
p=h;
while(p!=NULL)
{
h=h->next;
free(p);
p=h;
}
}
ForwardList *push_front(ForwardList *h,int num)
{
ForwardList *p;
p=(ForwardList *)malloc(sizeof(ForwardList));
p->data=num;
p->next=h;
h=p;
return (h);
}
void push_back(ForwardList *h,int num)
{
ForwardList *p,*q;
p=h;
while(p->next!=NULL)
p=p->next;
q=(ForwardList *)malloc(sizeof(ForwardList));
q->data=num;
p->next=q;
q->next=NULL;
}
ForwardList *pop_front(ForwardList *h)
{
ForwardList *p;
p=h;
h=h->next;
free(p);
return (h);
}
void pop_back(ForwardList *h)
{
ForwardList *p,*q;
p=h;
while(p->next!=NULL)
{
q=p;
p=p->next;
}
q->next=NULL;
free(p);
}

ForwardList *sort(ForwardList *h)
{
ForwardList *p,*q,*t;
ForwardList *Nh=NULL;
while(h!=NULL)
{
if(Nh==NULL)
{
Nh=h;
h=h->next;
Nh->next=NULL;
}
else
{
if(Nh->data<=h->data)
{
p=h;
h=h->next;
p->next=Nh;
Nh=p;
}
else
{
p=Nh;
q=Nh;
while(p!=NULL&&p->data>h->data)
{
q=p;
p=p->next;
}
if(p==NULL)
{
t=h;
h=h->next;
q->next=t;
t->next=NULL;
}
else
{
t=h;
h=h->next;
q->next=t;
t->next=p;
}
}
}
}
return (Nh);
}

void main()
{
ForwardList *h;
int num;
h=Create();
printf("The ForwardList:\n");
Show(h);
printf("Please input data (push_front):\n");
scanf("%d",&num);
h=push_front(h,num);
printf("Please input data (push_back):\n");
scanf("%d",&num);
push_back(h,num);
printf("(push_front) and (push_back) The ForwardList:\n");
Show(h);
printf("pop_front\n");
h=pop_front(h);
printf("pop_back\n");
pop_back(h);
printf("(pop_front) and (pop_back) The ForwardList:\n");
Show(h);
printf("Sort The ForwardList:\n");
h=sort(h);
Show(h);
Clear(h);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: