• 线性结构的一些基本操作


    View Code
      1 //话说像这样纯数据结构的题目是是最不讨人喜欢的了,但人在的无聊的时候真是太可怕了
    2 /*
    3 时间:
    4 2012年4月3日 19:08:58
    5 目的:
    6 数据结构练习题——线性表操作
    7 题目:
    8 请你定义一个线性表,可以对表进行“在某个位置之前插入一个元素”、“删除某个位置的元素”、
    9 “清除所有元素”、“获取某个位置的元素”等操作。键盘输入一些命令,可以执行上述操作。
    10 本题中,线性表元素为整数,线性表的第一个元素位置为1。线性表的最大长度为1000。
    11
    12 输入:
    13 各个命令以及相关数据,它们对应的格式如下:
    14 在某个位置之前插入操作:insert,接下来的一行是插入的组数n,下面是n行数据,
    15 每行数据有两个值,分别代表位置与插入的元素值
    16 清除线性表:clear
    17 获取某个位置的元素:getelem,接下来一行是需要获取的元素位置
    18 删除某个位置的元素:delete,接下来一行是被删除的元素位置
    19 当输入的命令为exit时,程序结束
    20 输出:
    21 当输入的命令为getelem时,请输出获取的元素值,
    22 当输入的命令是delete时,请输出被删除的那个元素值
    23 注意,所有的元素均占一行
    24 样例输入:
    25 insert
    26 2
    27 1 1
    28 2 2
    29 delete
    30 1
    31 clear
    32 insert
    33 2
    34 1 3
    35 2 4
    36 getelem
    37 2
    38 exit
    39 样例输出:
    40 1
    41 4
    42 */
    43
    44 #include<stdio.h>
    45 #include<string.h>
    46 #include<stdlib.h>
    47
    48 #define MAX 1001
    49
    50 typedef struct data
    51 {
    52 int array[MAX];
    53 int len;
    54 }Sq;
    55
    56 Sq st;
    57
    58 int main()
    59 {
    60 void insert(Sq *st,int a,int b);
    61 void clear(Sq *st);
    62 void getelem(Sq * st,int val);
    63 int _delete(Sq * st , int val,int *a);
    64
    65 char a[10];
    66
    67 clear(&st);
    68
    69 memset(a,0,sizeof(a));
    70
    71 scanf("%s",a);
    72
    73 while(strcmp(a,"exit")!=0)
    74 {
    75 if(0==strcmp(a,"insert"))
    76 {
    77 int n,a,b;
    78 scanf("%d",&n);
    79 while(n--)
    80 {
    81 scanf("%d%d",&a,&b);
    82 insert(&st,a,b);
    83 }
    84 }
    85 else if(0==strcmp(a,"delete"))
    86 {
    87 int n,a;
    88 scanf("%d",&n);
    89 if(_delete(&st,n,&a)==1)
    90 printf("%d\n",a);
    91
    92 }
    93 else if(0==strcmp(a,"clear"))
    94 clear(&st);
    95 else if(0==strcmp(a,"getelem"))
    96 {
    97 int n;
    98 scanf("%d",&n);
    99 getelem(&st,n);
    100 }
    101 memset(a,0,sizeof(a));
    102 scanf("%s",a);
    103 }
    104 return 0;
    105
    106 }
    107
    108 void insert(Sq * st,int a,int b)
    109 {
    110 int i;
    111
    112 for(i=st->len;i>=a;i--)
    113 st->array[i+1]=st->array[i];
    114 st->array[a]=b;
    115
    116 st->len++;
    117 }
    118 void clear(Sq * st)
    119 {
    120 st->len=0;
    121 }
    122 void getelem(Sq * st,int val)
    123 {
    124 printf("%d\n",st->array[val]);
    125 }
    126
    127 int _delete(Sq * st , int val,int *a)
    128 {
    129 int i;
    130
    131 if(val<1 || val > st->len)
    132 return 0;
    133 *a=st->array[val];
    134 for(i=val+1;i<=st->len;i++)
    135 st->array[i-1]=st->array[i];
    136 st->len--;
    137
    138 return 1;
    139
    140 }
    141
    142 /*
    143 总结:
    144 线性结构的一些基本操作
    145 */
  • 相关阅读:
    在Linux下安装配置Oracle11g R2
    使用C#读取dbf行情文件
    终于完成了DailyBuild
    如何用NANT+FxCop 并生成文档规范检测结果?
    Nant中的一个小问题(可能让许多人急掉许多汗哦)
    最近在研究 Daily Build 不知道如何用CC.Net 得到 VSS改动的情况
    利用NAnt取得远程VSS服务器中的文件并且编译
    未曾秋高气爽,亦然爬山去也
    如何使用命令提示符下的FxCop
    在NAnt中加入Vssget 任务
  • 原文地址:https://www.cnblogs.com/deosky/p/2431764.html
Copyright © 2020-2023  润新知