【问题描述】

复习考研累了的时候看看一集二十分钟左右的《生活大爆炸》也不失为一种乐趣。在剧中Sheldon可以说是一个极品,真不知Leonard是如何忍受这位极品室友成天的唠叨。

你知道么?Sheldon有一个神秘的小本本,记录了所有他从小开始讨厌的人名。Stuart这位漫画店老板就是小本本的一员哦,谁叫他常常毫不客气地挤兑Sheldon,曾多次赌赢过Sheldon呢。

Penny是一个漂亮的女孩,好奇心也很强。为了满足她的好奇心,我当回编剧让她意外知道了Sheldon的那个小本本放在了哪里。于是她几乎每天都去看,看看上面有哪些人。但是那个小本本上的人名实在太多。要知道她可是没上过大学在饭店里面当服务员啊。请聪明的你帮帮她处理处理那个小本本吧。

Sheldon每天都会在小本本里记录些人名,当然有时也会与他们和好就会从小本本中将这个人名删除。我们假设Sheldon会在一个空的小本本上插入、删除、查询某个人。

要帮助Penny,你需要知道一个顺序表是怎么初始化、插入、删除以及查找的。

【输入形式】

输入数据只有一组,有很多行。每行的格式可能是下列一种:
insert a name
delete name
show
search name
其中 a 是一个整数,代表在第a个名字前插入名字。name是一个姓名,只包含英文字母的大小写,每个名字不超过30个字符。
输入保证不会插入列表中已经存在的姓名,不会删除列表中不存在的姓名,也不会搜索列表中不存在的姓名。

【输出形式】

起始时,列表是空的。只输出show和search name 的结果。show将列表中的姓名全部输出,search只输出找到该名字的序号(从1开始)。每次输出占一行,姓名间用空格隔开。如果列表中没有名字了,show时也要输出一个空行。

【样例输入】

insert 1 Stuart
insert 2 Bernadette
show
search Stuart
delete Stuart
show
insert 2 Stuart
show
insert 1 Amy
insert 2 Leslie
insert 3 Stephanie
show
delete Leslie
show
search Stuart

【样例输出】

Stuart Bernadette
1
Bernadette
Bernadette Stuart
Amy Leslie Stephanie Bernadette Stuart
Amy Stephanie Bernadette Stuart
4

【提示】

#


1、名字是不含空格的,指令也是一定的,所以可以用scanf("%s", str)来读取。

2、上述代码有些函数头中变量类型与变量之间有个&,这个表示该变量是引用类型的,是C++特性。在C语言中存在值传递与指针传递,值传递中形参不可以改变实参的值,需要通过指针来修改。而引用变量实际上就是实参的另一个名字,这种类型的形参改变会影响实参的值。

3、使用题目中的代码需要自己定义其中缺失的类型和变量,例如Status、OK以及Error等。

4、ElemType类型中可以只有一个字符数组用来存储姓名。

5、LocateElem_Sq函数在调用时需要传递一个函数指针,可以这样定义:

Status cmp(ElemType e1, ElemType e2);

注意这个函数用来判断e1和e2是否相等,如果相等则返回非零值,否则返回0。因此可以在这个函数里直接返回 !strcmp(…)但最好需要改变返回类型。

6、内存分配以及字符串操作需要的头文件分别是stdlib.h和string.h需要被包含进来。

7、题目要求每个输出占一行,所以要注意换行。

【总结】

1、实际上,题目中几乎将主要代码都写出来了。解决这道题使用上面的代码是可能复杂了点,但将各个功能独立出来是个不错的思路。以后修改就方便了,特别适用于代码量较大的程序。

2、C语言中参数的传递分为值传递和指针传递,而C++中多了一个引用传递。值传递和指针传递都不可以改变传递进来的值,但指针可以改变其所指向的值。在C语言中,调用函数时传入的参数叫做“实参”,而在函数声明或定义中在函数头中的参数叫做“形参”。值传递与指针传递中,形参的改变是不影响实参的。C++中,引用传递,形参与实参实际上是同一个内容的不同名字,因而形参的变化会改变实参。引用传递是C++中一个很重要也很方便的特性,比如在可能会产生不必要的复制时,采用引用传递是一个很不错的解决方案。

【代码实现】
1.链表法

#include<bits/stdc++.h>
using namespace std;#define NO 0;
#define YES 1;
int len;
typedef int Status;
typedef struct Penny {char name[30];struct Penny *next;
} Lnode,*LinList;Status CreateList(LinList *L) {(*L)=(LinList )malloc(sizeof(Lnode));(*L)->next=NULL;len=0;return YES;
}Status Insert(LinList L,int i,char name[]) {LinList q,p;int j=0;q=L;p=(LinList )malloc(sizeof(Lnode));strcpy(p->name,name);if(!(q->next)) {p->next=L->next;L->next=p;len++;return YES;}while(q->next&&j<i-1) {q=q->next;j++;}p->next=q->next;q->next=p;len++;return YES;
}void Delete(LinList L,char name[]) {LinList q,p;q=L->next;p=L;while(q&&strcmp(q->name,name)!=0) {p=q;q=q->next;}p->next=q->next;free(q);len--;
}Status Search(LinList L,char name[]) {LinList q;int j=1;q=L->next;while(q&&strcmp(q->name,name)!=0) {j++;q=q->next;}if(!q)return NO;return j;
}void ShowList(LinList L) {LinList q;q=L->next;cout<<q->name;while(q->next) {q=q->next;cout<<' '<<q->name;}cout<<endl;
}int main() {char nam[30],str[30];int n,a;LinList L;CreateList(&L);while(cin>>str) {if(strcmp(str,"insert")==0) {cin>>n>>nam;Insert(L,n,nam);} else if(strcmp(str,"delete")==0) {cin>>nam;Delete(L,nam);} else if(strcmp(str,"search")==0) {cin>>nam;a=Search(L,nam);cout<<a<<endl;} else {if(len!=0)ShowList(L);elsecout<<endl;}}free(L);
}

【代码2】

#include<iostream>
#include<stdlib.h>
#include<string.h>
#define LIST_INIT_SIZE  100
#define LISTINCREMENT 10
using namespace std;typedef struct
{ char name[30];
}ElemType;typedef struct
{ ElemType *elem;int length;int listsize;
}SqList;
//初始化
int Initlist_Sq(SqList &L)
{  L.elem =(ElemType *) malloc(LIST_INIT_SIZE *sizeof(ElemType));if(!L.elem )return 1;L.length =0;L.listsize =LIST_INIT_SIZE ;return 1;
}
//插入
int  ListInsert_Sq(SqList &L,int i,ElemType &e)
{  ElemType *p;if(i<1||i>L.length +1)return 0;if(L.length >=L.listsize ){ ElemType  *newbase=(ElemType *) realloc(L.elem,(L.listsize +LISTINCREMENT) * sizeof(ElemType));if(!newbase)return 0;L.elem =newbase;L.listsize  +=LISTINCREMENT;}ElemType *q =&(L.elem [i-1]);for (p=&(L.elem [L.length -1]);p>=q;--p)*(p+1)=*p;*q=e;++L.length;return 1;
}//查找
int LocateElem_Sq(SqList L, ElemType e ,  int(*compare)(ElemType,ElemType))
{  int i;ElemType *p;i=1;p= L.elem;while(i<=L.length &&!(*compare)(*p++,e) )++i;if(i<=L.length )return i;else return 0;
}int cmp(ElemType e1,ElemType e2)
{ return (int )!strcmp(e1.name ,e2.name );
}int ListDelete_Sq(SqList & L,ElemType &e)
{ElemType *p,*q,*h;int i;h=L.elem;i=LocateElem_Sq( L,e, cmp);if(i<1||i>L.length )return 0;p = & (L.elem [i-1]);e = *p;q=L.elem +L.length -1;for(++p; p<=q; ++p)*(p-1)=*p;--L.length ;return 1;
}void listshow(SqList L)
{  int i;for(i=0; i<L.length ;i++){ cout<<L.elem[i].name<<' ';}cout<<endl;
}int main()
{ char str[10];SqList namelist;Initlist_Sq( namelist);int number;ElemType e;while(cin>>str){  if(strcmp(str,"insert")==0) {  cin>>number;cin>>e.name ;ListInsert_Sq(namelist , number, e);}else   if(strcmp(str,"delete")==0)   { cin>>e.name; ListDelete_Sq(namelist,e);  }else    if(strcmp(str,"search")==0) {  cin>>e.name;cout<<LocateElem_Sq(namelist,e,cmp)<<endl;}else  if(strcmp(str,"show")==0)listshow(namelist);}return 0;
}

顺序表的初始化、插入、删除、查找相关推荐

  1. 静态顺序表创建,初始化,插入,删除,查找

    #include<stdlib.h> #define MaxSize 20 typedef struct {int data[MaxSize];int length; }sqlist; / ...

  2. 动态顺序表的创建,增加,删除,查找

    先上代码,先上代码 #include<stdio.h> #include<stdlib.h> #define initsize 10 typedef struct {int* ...

  3. 顺序表的插入删除查找遍历

    顺序表的插入删除查找遍历 文章目录 顺序表的插入删除查找遍历 代码 运行结果截图 代码 #define Maxsize 100typedef int ElemType; typedef struct{ ...

  4. 1-2、数据结构线性表之顺序表的基本操作插入、删除、遍历、初始化

    学习需要记录,更需要温习! 上一篇我们总结了什么是线性表,线性表的ADT类型,线性表的两种存储类型顺序存储结构和链式存储结构,今天正式进入线性表的顺序存储结构的总结和归纳,也就是数据结构的线性表的顺序 ...

  5. C++实现线性顺序表的初始化,插入,删除,销毁,清空等功能

    C++实现线性顺序表的初始化,插入,删除,销毁,清空等功能 以下代码主要严蔚参考敏主编的<数据结构>(C语言)编写 //线性顺序表 #include <iostream> #d ...

  6. C语言-数据结构-可变长顺序表的初始化,插入和输出

    问题描述: 实现可变长顺序表的建表过程.任务要求:通过顺序表的初始化.插入算法,实现顺序表的建表,并依次输出顺序表元素. [输入形式] 第一行输入整数N(1<=N<=100),表示创建长度 ...

  7. 顺序表插入删除查找操作

    线性表实验 一.实验目的 1.掌握线性表的顺序存储结构 2.验证顺序表及其基本操作的实现 3.理解算法与程序的关系们能够将顺序表算法转换为对应的程序 二.实验步骤 1.建立含有若干个元素的顺序表 2. ...

  8. c语言pushback用法,C语言:【动态顺序表】动态顺序表的初始化、打印、尾插PushBack、尾删PopBack...

    #include #include #include #include #include typedef int DateType; typedef struct SeqList { DateType ...

  9. c语言:【顺序表】静态顺序表的初始化、打印、尾插、尾删

    #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<asser ...

  10. 008_表内容的插入删除修改

    一. 插入表数据 1. 插入表数据命令: insert into `表名` (`列名1`,`列名2`,`列名3`,...) values (值1,值2,值3,...); . 2. 插入表数据简单写法, ...

最新文章

  1. 我的第一篇paper
  2. python 字典去除空值
  3. SSO单点登录之——JWT
  4. SVM学习(三):线性分类器的求解
  5. JZOJ 3617. 【ZJOI2014】力
  6. Oracle中Decode()函数使用技巧
  7. c++第n小的质数_形形色色的素数 -- 质数定理
  8. C++的new运算符和delete运算符
  9. 微信抢红包python脚本不用手机_用Python实现微信自动化抢红包,再也不用担心抢不到红包了...
  10. delphi 一些知识文章地址记录(正则)
  11. 开发人员,请不要抱怨项目没有文档
  12. 常见python基础面试题_常:汉字常的意思/解释/字义/来源 - 新华字典
  13. 修复SQL2000数据库一致性错误的语句
  14. 生产者消费者1.0(wait notify)
  15. 雪城大学Syracuse University介绍
  16. 麒麟V10SP1高级服务器版本操作系统离线安装docker容器技术
  17. DialogFragment 白边去除
  18. python 语言属于_python语言属于以下哪种语言?
  19. about dream
  20. 百度地图 标记聚合器MarkerClusterer结合TextIconOverlay,根据标记点的属性更换聚合器的样式

热门文章

  1. 【OpenCV学习笔记】之离散傅里叶变换(DFT)
  2. 二年级课程表(4月18日-4月22日)
  3. 阿里视频云点播端体验Demo
  4. 用python画多来a梦-Python—turtle画图(哆啦A梦)
  5. 【GNN报告】复旦大学许嘉蓉:基于图数据的鲁棒机器学习
  6. Steam版XCOM: Enemy Within(内部敌人)不能启动的问题
  7. 【算法】ACO蚂蚁寻路最短路径TSP问题-多篇文章总结
  8. JAVA 生成二维码 并设置 +失效机制
  9. mysql workbench pk_mysql workbench建表时PK,NN,UQ,BIN,UN,ZF,AI_MySQL - numeric
  10. The Bequeath Protocol Adapter [ID 16653.1]