顺序表
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;
}
数据结构:指数据之间的相互关系
包括:
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;
}
相关文章推荐
- MySQL数据库limit分页、排序-SQL语句示例
- code vs [网络流24题] 最长递增子序列问题
- 深入理解计算机系统-之-数值存储(二)--C程序打印变量的每一字节或者位
- linux创建账户并自动生成主目录和主目录下的文件
- ACM数论之旅5---数论四大定理(你怕不怕(☆゚∀゚)老实告诉我)
- 利用 Gitbook 生成文档中心站点
- iOS Dev (67) 单例的实现
- ACM数论之旅4---扩展欧几里德算法(欧几里德(・∀・)?是谁?)
- mysql之运算符
- ACM数论之旅3---最大公约数gcd和最小公倍数lcm(苦海无边,回头是岸( ̄∀ ̄))
- 网页特殊符号HTML代码大全
- 【BZOJ 2321】 [BeiJing2011集训]星器
- leetcode21 合并两个排好序的单链表
- Openstack基本命令
- C++中函数strcpy和strcpy_s(VS pro 2015)
- Doxygen
- 关于添加类目
- Android AudioTrack分析
- Ubuntu启动项
- eclipse tomcat部署solr