实现链表的基本操作
输入要求
首先输入元素个数n,并输入n个整数。然后,输入命令编码及所需信息。详见代码中的注释及样例输入
输出要求
无
测试数据
输入示例
4
1 2 3 4
2
0 5
1 3
3 0 4
4 5
3 1 9
4 5
2
100
-1
输出示例
1 2 3 4
Failed
3
Failed
Failed
Succeed
Succeed
9 1 2 3
Unknown Command.
小贴士
(无)
题目来源
WeJudge原创
#include<stdio.h>
#include<stdlib.h>
// 函数结果状态码
typedef int Status;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int ElemType; // 元素数据类型
typedef struct LNode{
ElemType data; //数据域
struct LNode *next; //指针域
}LNode,*LinkList;
// 基本操作,序号i从1开始
Status createList(LinkList &L, int n); // 创建n个元素的表,与用户输入的顺序相同
Status getElem(LinkList L, int i, ElemType &e); // 取值,将序号i的元素存入e
int locateElem(LinkList L, ElemType e); // 查找,返回元素e的序号,失败返回0
Status listInsert(LinkList &L, int i, ElemType e); // 插入
Status listDelete(LinkList &L, int i); // 删除
void traverseList(LinkList L){ // 遍历,打印表中元素
LNode *p = L->next;
while(p){
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main(){
LinkList list;
int cmd, result, e, n, i;
scanf("%d", &n);
createList(list, n);
while (~scanf("%d", &cmd) && cmd!=-1) { // 选择操作
switch (cmd) {
case 0: // 取值
scanf("%d", &i);
result = getElem(list, i, e);
if (result) printf("%d\n", e);
else printf("Failed\n");
break;
case 1: // 查找
scanf("%d", &e);
result = locateElem(list, e);
if (result) printf("%d\n", result);
else printf("Failed\n");
break;
case 2: // 显示
traverseList(list);
break;
case 3: // 插入
scanf("%d%d", &i, &e);
result = listInsert(list, i, e);
if (result) printf("Succeed\n");
else printf("Failed\n");
break;
case 4: // 删除
scanf("%d", &i);
result = listDelete(list, i);
if (result) printf("Succeed\n");
else printf("Failed\n");
break;
default:
printf("Unknown Command.\n");
break;
}
}
return 0;
}
****************************************************************************************************************************
#include<stdio.h>
#include<stdlib.h>
// 函数结果状态码
typedef int Status;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int ElemType; // 元素数据类型
typedef struct LNode{
ElemType data; //数据域
struct LNode *next; //指针域
}LNode,*LinkList;
// 基本操作,序号i从1开始
Status createList(LinkList &L, int n); // 创建n个元素的表,与用户输入的顺序相同
Status getElem(LinkList L, int i, ElemType &e); // 取值,将序号i的元素存入e
int locateElem(LinkList L, ElemType e); // 查找,返回元素e的序号,失败返回0
Status listInsert(LinkList &L, int i, ElemType e); // 插入
Status listDelete(LinkList &L, int i); // 删除
void traverseList(LinkList L){ // 遍历,打印表中元素
LNode *p = L->next;
while(p){
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main(){
LinkList list;
int cmd, result, e, n, i;
scanf("%d", &n);
createList(list, n);
while (~scanf("%d", &cmd) && cmd!=-1) { // 选择操作
switch (cmd) {
case 0: // 取值
scanf("%d", &i);
result = getElem(list, i, e);
if (result) printf("%d\n", e);
else printf("Failed\n");
break;
case 1: // 查找
scanf("%d", &e);
result = locateElem(list, e);
if (result) printf("%d\n", result);
else printf("Failed\n");
break;
case 2: // 显示
traverseList(list);
break;
case 3: // 插入
scanf("%d%d", &i, &e);
result = listInsert(list, i, e);
if (result) printf("Succeed\n");
else printf("Failed\n");
break;
case 4: // 删除
scanf("%d", &i);
result = listDelete(list, i);
if (result) printf("Succeed\n");
else printf("Failed\n");
break;
default:
printf("Unknown Command.\n");
break;
}
}
return 0;
}
Status createList(LinkList &L, int n){
L = new LNode;
L->next = NULL;
LNode *r = L;
for(int i=0;i<n;i++){
LNode *p= new LNode;
scanf("%d",&p->data);
p->next = NULL;
r->next = p;
r = p;
}
return OK;
}
Status getElem(LinkList L, int i, ElemType &e){
LNode *p = L->next;
int j = 1;
while(p && j<i)
{
p = p->next;
++j;
}
if(! p || j>i)
return ERROR;
e = p->data;
return OK;
}
int locateElem(LinkList L, ElemType e){
LNode *p = L->next;
int j=1;
while(p && p->data !=e){
p = p->next;
j++;
}
if(!p)
return 0;
return j;
}
Status listInsert(LinkList &L, int i, ElemType e){
LNode *p = L;
int j = 0 ;
while(p && (j<i-1))
{
p = p->next;
j++;
}
if(!p || j >i -1)
return ERROR;
LinkList s;
s = new LNode;
s->data = e;
s->next = p->next;
p->next = s;
return OK;
}
Status listDelete(LinkList &L, int i){
LNode *p=L;
int j = 0;
while((p->next) && (j<i - 1)){
p = p->next;
j++;
}
if(!(p->next) || (j>i-1))
return ERROR;
LinkList q;
q = new LNode;
q = p->next;
p ->next = q->next;
delete q;
return OK;
}