顺序列表的操作
2011-04-21 11:13
239 查看
#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>
#define maxsize 128
typedef struct sequeue_list //链表定义
{
int data[maxsize];
int last;
}sqlist,*sqlink;
sqlink init_list(void) //链表初始化
{
sqlink L = (sqlink)malloc(sizeof(sqlist));
L->last = -1;
return L;
}
bool is_empty(sqlink L) //判断是否为空
{
return (L->last ==-1);
}
bool is_full(sqlink L) //判断是否为满
{
return (L->last == maxsize -1);
}
bool insert(sqlink L,int data) //在链表末尾插入
{
if(is_full(L))
return false;
else
L->data[++(L->last)] = data;
return true;
}
bool sort(sqlink L) //冒泡排序
{
int i,j,temp,len;
len = length(L);
for(i=0;i<len-1;i++){
for(j=0;j<len-i-1;j++){
if(L->data[j] > L->data[j+1]){
temp = L->data[j];
L->data[j] = L->data[j+1];
L->data[j+1] = temp;
}
}
}
return true;
}
bool insert_data(sqlink L,int data) //插入数据
{
int i,j;
int len = length(L);
for(i=0;i<len;i++){
if(L->data[i]>data){
L->last++;
for(j=L->last;j>=i;j--){
L->data[j] = L->data[j-1];
}
L->data[i] = data;
}
}
}
int length(sqlink L) //获取长度
{
return L->last+1;
}
void show_data(sqlink L) //显示列表
{
int i;
int len = length(L);
for(i=0;i<len;i++)
fprintf(stderr,"data[%d]:%d/n",i,L->data[i]);
}
bool delete(sqlink L,int data) //删除数据操作
{
int i,j;
int len = length(L);
if(is_empty(L))
return false;
else
for(i=0;i<len;i++){
if(data == L->data[i]){
for(j=i;j<len;j++)
L->data[j] = L->data[j+1];
}
}
L->last--;
return true;
}
int main(void)
{
sqlink L;
L = init_list();
int data,ret,len;
int i,k;
bool flag = false;
fprintf(stderr,"input:/n");
scanf("%d",&data);
while(data != -1){
insert(L,data);
show_data(L);
scanf("%d",&data);
}
sort(L);
fprintf(stderr,"insert:/n");
scanf("%d",&data);
insert_data(L,data);
show_data(L);
fprintf(stderr,"delete:/n");
scanf("%d",&data);
len = length(L);
for(k=0;k<len;k++){
if(L->data[k] == data){
delete(L,data);
flag = true;
}
else
flag = false;
}
if(flag == true)
fprintf(stderr,"delete succssful!/n");
else
fprintf(stderr,"delete false!/n");
show_data(L);
return 0;
}
#include<stdbool.h>
#include<stdlib.h>
#define maxsize 128
typedef struct sequeue_list //链表定义
{
int data[maxsize];
int last;
}sqlist,*sqlink;
sqlink init_list(void) //链表初始化
{
sqlink L = (sqlink)malloc(sizeof(sqlist));
L->last = -1;
return L;
}
bool is_empty(sqlink L) //判断是否为空
{
return (L->last ==-1);
}
bool is_full(sqlink L) //判断是否为满
{
return (L->last == maxsize -1);
}
bool insert(sqlink L,int data) //在链表末尾插入
{
if(is_full(L))
return false;
else
L->data[++(L->last)] = data;
return true;
}
bool sort(sqlink L) //冒泡排序
{
int i,j,temp,len;
len = length(L);
for(i=0;i<len-1;i++){
for(j=0;j<len-i-1;j++){
if(L->data[j] > L->data[j+1]){
temp = L->data[j];
L->data[j] = L->data[j+1];
L->data[j+1] = temp;
}
}
}
return true;
}
bool insert_data(sqlink L,int data) //插入数据
{
int i,j;
int len = length(L);
for(i=0;i<len;i++){
if(L->data[i]>data){
L->last++;
for(j=L->last;j>=i;j--){
L->data[j] = L->data[j-1];
}
L->data[i] = data;
}
}
}
int length(sqlink L) //获取长度
{
return L->last+1;
}
void show_data(sqlink L) //显示列表
{
int i;
int len = length(L);
for(i=0;i<len;i++)
fprintf(stderr,"data[%d]:%d/n",i,L->data[i]);
}
bool delete(sqlink L,int data) //删除数据操作
{
int i,j;
int len = length(L);
if(is_empty(L))
return false;
else
for(i=0;i<len;i++){
if(data == L->data[i]){
for(j=i;j<len;j++)
L->data[j] = L->data[j+1];
}
}
L->last--;
return true;
}
int main(void)
{
sqlink L;
L = init_list();
int data,ret,len;
int i,k;
bool flag = false;
fprintf(stderr,"input:/n");
scanf("%d",&data);
while(data != -1){
insert(L,data);
show_data(L);
scanf("%d",&data);
}
sort(L);
fprintf(stderr,"insert:/n");
scanf("%d",&data);
insert_data(L,data);
show_data(L);
fprintf(stderr,"delete:/n");
scanf("%d",&data);
len = length(L);
for(k=0;k<len;k++){
if(L->data[k] == data){
delete(L,data);
flag = true;
}
else
flag = false;
}
if(flag == true)
fprintf(stderr,"delete succssful!/n");
else
fprintf(stderr,"delete false!/n");
show_data(L);
return 0;
}
相关文章推荐
- 线性表的顺序列表的定义、初始化等操作
- 线性表的顺序列表的定义、初始化等操作
- (四)线性表的顺序实现及相关操作
- Python 列表类型及相关操作
- Sql Server 2008常用操作系列 - 日期转字符串,可用格式列表
- 顺序表相关操作
- html 下拉列表操作
- selenium操作选择列表
- 循环队列的相关操作(顺序结构)
- P-1.6.1 操作列表例题1
- Python 列表(list)操作
- DataGridView使用技巧七:列顺序的调整、操作行头列头的标题
- 初始化列表和声明的顺序之间的关系
- datatable 操作小技巧(查询结果列表中增加一列表中其它2个以上的字段合并成的新列)
- Python列表和元组的定义与使用操作示例
- 队列的顺序存储及其基本操作
- (推荐)对下拉列表select的一些操作
- 顺序栈的基本操作
- C# 对sharepoint 列表的一些基本操作,包括添加/删除/查询/上传文件给sharepoint list添加数据
- 数据结构C语言实现线性表(顺序实现)的初始化与基本操作