数据结构练习 3/30

这里用的是严蔚敏版《数据结构 (C语言版)》和《数据结构题集》,深感自己的代码写得又渣又无力,打算把这本书好好琢磨透彻,里面的算法和模板都实现一遍,题目也都做一遍。最终能够做到举一反三、熟之又熟地运用数据结构来解决实际问题。
题集 2.10 2.11

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
using namespace std;
//1 从顺序表A中删除第I个元素后面的K个元素
typedef int Elemtype;
typedef struct {
Elemtype *elem;
int length;
int listsize;
} Sqlist;

int InitList_Sq(Sqlist &l){
 l.elem=(Elemtype *)malloc(sizeof(Elemtype)*LIST_INIT_SIZE);//calloc(list_initsize,sizeof(elemtype))??
 //calloc and malloc 's diffence;
 if (!l.elem) return 0;
 l.length=0;
 l.listsize=LIST_INIT_SIZE;
 return 1;
}
int readSqlist(Sqlist &l){
int x;
scanf ("%d",&x);
int i=0;
while(x!=-999&&i<LIST_INIT_SIZE){
l.elem[i]=x;
i++;
scanf ("%d",&x);
l.length++;
}
return 1;
}
int displaySqlist(Sqlist &l){
int i=0;
while (i<l.length){
printf("%d ",l.elem[i]);
i++;
}
printf("\n");
return 1;
}

int DeleteList_Sq(Sqlist &a,int i,int k){
if (i<0||i>a.length||k<0||k>a.length-i)
return 0;
else {
if (a.length-i-k>=k){
for (int j=0;j<k;j++){
a.elem[j+i]=a.elem[k+i+j];
}a.length=a.length-k;
}else {
for (int j=0;j<a.length-i-k;j++){
a.elem[j+i]=a.elem[k+i+j];
}a.length=a.length-k;
}
return 1;
}
}
int InsertOrderedList_Sq(Sqlist &va,int x){
int i=0;
while (va.elem[i]<x&&i<va.length){
i++;
}
if (i==va.length){
va.elem[va.length]=x;
va.length++;
}
if (va.elem[i]>=x){
for (int j=va.length;j>i;j--){
va.elem[j]=va.elem[j-1];
}
va.elem[i]=x;
va.length++;
//一种更简便的方法
//if (va.length==va.listsize)
//return 0;//overflow
//for (int j=va.length;j>0,x<va.elem[j-1];j--)
//va.elem[j]=va.elem[j-1];
//va.elem[j]=x;
//va.length++;
//}
return 1;
}

int main()
{
   Sqlist l;
   InitList_Sq(l);
   readSqlist(l);
   displaySqlist(l);
   DeleteList_Sq(l,2,5);
   displaySqlist(l);

    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值