函数题:使用头插法将元素插入到链表
本题要求实现一个函数CreateList(),此函数采用头插法将整数插入到链表中。
可统计任一整数中某个位数出现的次数。例如-21252中,2出现了3次,则该函数应该返回3。
### 函数接口定义:
c++
函数接口描述如下:
Status CreateList(LinkList L,int n);
参数说明:其中 L 和 n 都是用户传入的参数。 L 是需要操作的单链表; n 是需要插入的元素个数,元素由用户输入。如果操作成功,函数须返回OK(1)。
### 裁判测试程序样例:
c
在这里给出函数被调用进行测试的例子。例如:
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -2
#ifndef NULL
#define NULL ((void*)0)
#endif
typedef int Status;
/* 单链表元素类型的定义 */
typedef int ElemType;
/* 单链表结点结构体的定义 */
typedef struct LNode
{
ElemType data;
struct LNode * next;
}LNode;
/*定义了一个LinkList类型*/
typedef LNode* LinkList; //指向单链表结点的指针
Status InitList_L(LinkList *LL)
{
(*LL) = (LinkList)malloc(sizeof(LNode));
if(!(*LL))
exit(OVERFLOW);
(*LL)->next = NULL;
return OK;
}
Status ListEmpty_L(LinkList L)
{
if(L!=NULL && L->next==NULL) //链表存在且只有头结点
return TRUE;
else
return FALSE;
}
int ListLength_L(LinkList L){
LNode * p;//LinkList p;
int i;
i = 0;
if(L)
{
p = L->next;//将头结点的next值赋给p;
while(p)
{
i++;
p = p->next;
}
}
return i;
}
Status InserHeadList_L(LinkList L,ElemType e){
LNode * q;
//生成新结点,并给新结点数据赋值
q = (LNode *)malloc(sizeof(LNode));
q->data = e;
//q->next = NULL;
//将新结点插入到链表的首部
q->next = L->next;
L->next = q;
}
Status printList_L(LinkList L){//循环输出链表中的所有数据
LNode * p;
if(L){
p = L->next;//将头结点的next值赋给p;
while(p){
printf("%d ",p->data);
p = p->next;
}
}
printf("\n");
return OK;
}
int main(){
LinkList L,Q,P;
//LNode * L;
int i;
ElemType e;
InitList_L(&L);
L->next = (LinkList)malloc(sizeof(LNode));
L->next->data = 10;
L->next->next = NULL;
ListEmpty_L(L) ? printf(" L 为空!!\n") : printf(" L 不为空!\n");
printf("表中有%d个元素。\n",ListLength_L(L));
InserHeadList_L(L,20);
printf("表中有%d个元素。\n",ListLength_L(L));
CreateList_F1(L,3);
printList_L(L);
return 0;
}
/* 请在这里填写答案 */
### 输入样例:
在这里给出一组输入。例如:
in
3 33 333
### 输出样例:
在这里给出相应的输出。例如:
out
L 不为空!
表中有1个元素。
表中有2个元素。
请输入3个数据(用空格分割):
333 33 3 20 10
答案:若无答案欢迎评论
可统计任一整数中某个位数出现的次数。例如-21252中,2出现了3次,则该函数应该返回3。
### 函数接口定义:
c++
函数接口描述如下:
Status CreateList(LinkList L,int n);
参数说明:其中 L 和 n 都是用户传入的参数。 L 是需要操作的单链表; n 是需要插入的元素个数,元素由用户输入。如果操作成功,函数须返回OK(1)。
### 裁判测试程序样例:
c
在这里给出函数被调用进行测试的例子。例如:
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -2
#ifndef NULL
#define NULL ((void*)0)
#endif
typedef int Status;
/* 单链表元素类型的定义 */
typedef int ElemType;
/* 单链表结点结构体的定义 */
typedef struct LNode
{
ElemType data;
struct LNode * next;
}LNode;
/*定义了一个LinkList类型*/
typedef LNode* LinkList; //指向单链表结点的指针
Status InitList_L(LinkList *LL)
{
(*LL) = (LinkList)malloc(sizeof(LNode));
if(!(*LL))
exit(OVERFLOW);
(*LL)->next = NULL;
return OK;
}
Status ListEmpty_L(LinkList L)
{
if(L!=NULL && L->next==NULL) //链表存在且只有头结点
return TRUE;
else
return FALSE;
}
int ListLength_L(LinkList L){
LNode * p;//LinkList p;
int i;
i = 0;
if(L)
{
p = L->next;//将头结点的next值赋给p;
while(p)
{
i++;
p = p->next;
}
}
return i;
}
Status InserHeadList_L(LinkList L,ElemType e){
LNode * q;
//生成新结点,并给新结点数据赋值
q = (LNode *)malloc(sizeof(LNode));
q->data = e;
//q->next = NULL;
//将新结点插入到链表的首部
q->next = L->next;
L->next = q;
}
Status printList_L(LinkList L){//循环输出链表中的所有数据
LNode * p;
if(L){
p = L->next;//将头结点的next值赋给p;
while(p){
printf("%d ",p->data);
p = p->next;
}
}
printf("\n");
return OK;
}
int main(){
LinkList L,Q,P;
//LNode * L;
int i;
ElemType e;
InitList_L(&L);
L->next = (LinkList)malloc(sizeof(LNode));
L->next->data = 10;
L->next->next = NULL;
ListEmpty_L(L) ? printf(" L 为空!!\n") : printf(" L 不为空!\n");
printf("表中有%d个元素。\n",ListLength_L(L));
InserHeadList_L(L,20);
printf("表中有%d个元素。\n",ListLength_L(L));
CreateList_F1(L,3);
printList_L(L);
return 0;
}
/* 请在这里填写答案 */
### 输入样例:
在这里给出一组输入。例如:
in
3 33 333
### 输出样例:
在这里给出相应的输出。例如:
out
L 不为空!
表中有1个元素。
表中有2个元素。
请输入3个数据(用空格分割):
333 33 3 20 10
答案:若无答案欢迎评论