您的位置:首页 > 其它

顺序表

2016-02-18 19:21 232 查看
/*练习:实现从键盘输入整数, 顺序表里面,按增长方式进行存储(输入正整数,插入数据,输入负整数,删除数据. 输入3 插入数据3 到顺序表里面;输入-3,把3数据从顺序顺删除)。

数据结构:指数据之间的相互关系
包括:
1. 逻辑结构:表示数据运算之间的抽象关系
分:线性结构 和非线性结构
2. 存储结构:逻辑结构在计算机实现
分:顺序存储方法、链式存储方法、索引存储方法、散列存储方法
3、数据运算:对数据进行的操作。插入/删除/查找/排序

线性表:这是一种逻辑结构,班级同学是线性表。特征,所有的元素都一对一关系
(数学语言:任何一个元素,有且仅有一个直接前驱节点和直接后驱节点,第一个节点没有直接直接前驱节点,最后一个节点 没有后驱节点)
使用用存储结构中的:顺序存储方法、链式存储方法
顺序存储方法:
---》顺序表:
--》1.定义顺序表/初始化顺序表/插入/删除/

#include<stdbool.h>
#include<stdlib.h>
#include<stdio.h>
#define SIZE 12

//声明
struct seqlist
{
  int last;
  int data[SIZE];
};

//初始化
struct seqlist *init_seqlist()
{
  struct seqlist *sl = malloc(sizeof(struct seqlist));
  sl->last = -1;
  return sl;
}

//判断顺序表是否满
bool if_full(struct seqlist *sl)
{
  return sl->last == SIZE-1;
}

//插入操作
bool inser_node(int data,struct seqlist *sl)
{
  if(if_full(sl))
    return false;
  int i;
  for(i=sl->last;i>=0;i--)
{
  if(data <sl->data[i])
    continue;
  else break;

}
int j;
for(j = sl->last;j>i;j--)
{
  sl->data[j+1] = sl->data[j];

}
  sl->data[j+1] = data;
  sl->last++;
  return true;
}

//判断顺序表是否为空
bool if_null(struct seqlist *sl)
{
  return sl->last == -1;
}

//删除操作
bool remove_node(int data,struct seqlist *sl)
{
  if(if_null(sl))
    return false;
//location
int i;
for(i = sl->last;i>=0;i--)
{
  if(data!=sl->data[i])
  continue;
  else
  {

    printf("find failed!");
    break;
  }
}
int j;
for(j=i;j<=sl->last;j++)
{
  sl->data[j] = sl->data[j+1];
// printf("%d",sl->data[j-1]);
}
  sl->last--;
  return true;

//move node

}

//将数据打印出来
void show(struct seqlist *sl)
{
int i;
for(i=0;i<=sl->last;i++)
  printf("%d\t",sl->data[i]);
  printf("\n");
}
int main()
{
  struct seqlist *sl = init_seqlist();
  int n;
while(1)
  {
    scanf("%d",&n);
    if(n>0)
    {
    if(inser_node(n,sl))
    show(sl);
    }
  else if(n<0)
    {
    if(remove_node(-n,sl))
    show(sl);
    else
    printf("remove failed!");
    }
  }
  return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: