实现顺序表以及顺序表的简单运算
2016-04-09 09:23
477 查看
自定义头文件 my_list.h
#define _CRT_SECURE_NO_WARNINGS
#ifndef __MY_LIST_H__
#define __MY_LIST_H__
//文件功能:实现线性表的基本运算
//1:顺序表的插入预算
//2:顺序表中元素的逆序
//3:顺序表的删除运算
#define max_size 1024 //定义顺序表的上限长度
typedef int datatype;
typedef struct
{
datatype data[max_size];
int length;
}data_list;
void set_null(data_list *L)
{
L->length = 0;
} // 清空链表。
void reversr_list(data_list *L) //函数功能 :逆序一个数组
{
int start, end;
datatype swap;
for (start = 0, end = L->length - 1; start < end; start++, end--)
{
swap = L->data[start];
L->data[start] = L->data[end];
L->data[end] = swap;
}
}
void insert(data_list *L, int x)
{
int i = 0;
int j;
while ((i <= L->length - 1) && (x > L->data[i])) //按照升序判断插入元素的下标位置
{
i++;
}
for (j = L->length - 1; j>i; j--)
{
L->data[j + 1] = L->data[j]; //找到后数组中的元素后移动一位
}
L->data[i + 1] = x;
L->length++;
}
void delete_list(data_list *L, int i) // 函数功能:实现线性表 某一个值删除的运算
{ // 参数:结构体指针,所删除元素的下标
int j;
datatype swap;
for (j = i; j <= L->length - 1; j++)
{
L->data[j - 1] = L->data[j];
}
L->length--;
}
void input_list(data_list *L)
{
printf("请输入顺序表的初始数据,—1表示结束:");
do
{
scanf("%d", &L->data[L->length]);
L->length++;
} while (L->data[L->length - 1] != -1);
L->length--;
}
void print_list(data_list *L)
{
int i;
for (i = 0; i <= L->length - 1; i++)
{
printf("%d ", L->data[i]);
}
printf("\n");
}
int init()
{
data_list L1, L2, L3;
int i, x;
int num;
printf("***********************************************\n");
printf("*******1:逆序线性表操作 ************\n");
printf("*******2:线性表插入一个数 ************\n");
printf("*******3:线性表删除某位置元素的操作***********\n");
printf("input a num:\n");
scanf("%d", &num);
switch (num)
{
case 1:
{
set_null(&L1);
input_list(&L1);
reversr_list(&L1);
printf("逆序后的顺序表如下:");
print_list(&L1);
break;
}
case 2:
{
set_null(&L2);
input_list(&L2);
printf("输入要插入的数据:");
scanf("%d", &x);
insert(&L2, x);
printf("插入后的顺序表元素如下:");
print_list(&L2);
break;
}
case 3:
{
set_null(&L3);
input_list(&L3);
printf("输入要删除的数据的位置:");
scanf("%d", &x);
delete_list(&L3, x);
printf("删除后的顺序表元素如下:");
print_list(&L3);
break;
}
default:
{
printf("the input is error!!!");
}
}
}
C文件:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include "my_list.h"
//文件功能:实现线性表的基本运算
//1:顺序表的插入预算
//2:顺序表中元素的逆序
//3:顺序表的删除运算
void set_null(data_list *L);
void reversr_list(data_list *L); //函数功能 :逆序一个数组
void insert(data_list *L, int x);
void delete_list(data_list *L, int i); // 函数功能:实现线性表 某一个值删除的运算// 参数:结构体指针,所删除元素的下标
void input_list(data_list *L);
void print_list(data_list *L);
int init();
int main()
{
init();
return 0;
}
#endif
#define _CRT_SECURE_NO_WARNINGS
#ifndef __MY_LIST_H__
#define __MY_LIST_H__
//文件功能:实现线性表的基本运算
//1:顺序表的插入预算
//2:顺序表中元素的逆序
//3:顺序表的删除运算
#define max_size 1024 //定义顺序表的上限长度
typedef int datatype;
typedef struct
{
datatype data[max_size];
int length;
}data_list;
void set_null(data_list *L)
{
L->length = 0;
} // 清空链表。
void reversr_list(data_list *L) //函数功能 :逆序一个数组
{
int start, end;
datatype swap;
for (start = 0, end = L->length - 1; start < end; start++, end--)
{
swap = L->data[start];
L->data[start] = L->data[end];
L->data[end] = swap;
}
}
void insert(data_list *L, int x)
{
int i = 0;
int j;
while ((i <= L->length - 1) && (x > L->data[i])) //按照升序判断插入元素的下标位置
{
i++;
}
for (j = L->length - 1; j>i; j--)
{
L->data[j + 1] = L->data[j]; //找到后数组中的元素后移动一位
}
L->data[i + 1] = x;
L->length++;
}
void delete_list(data_list *L, int i) // 函数功能:实现线性表 某一个值删除的运算
{ // 参数:结构体指针,所删除元素的下标
int j;
datatype swap;
for (j = i; j <= L->length - 1; j++)
{
L->data[j - 1] = L->data[j];
}
L->length--;
}
void input_list(data_list *L)
{
printf("请输入顺序表的初始数据,—1表示结束:");
do
{
scanf("%d", &L->data[L->length]);
L->length++;
} while (L->data[L->length - 1] != -1);
L->length--;
}
void print_list(data_list *L)
{
int i;
for (i = 0; i <= L->length - 1; i++)
{
printf("%d ", L->data[i]);
}
printf("\n");
}
int init()
{
data_list L1, L2, L3;
int i, x;
int num;
printf("***********************************************\n");
printf("*******1:逆序线性表操作 ************\n");
printf("*******2:线性表插入一个数 ************\n");
printf("*******3:线性表删除某位置元素的操作***********\n");
printf("input a num:\n");
scanf("%d", &num);
switch (num)
{
case 1:
{
set_null(&L1);
input_list(&L1);
reversr_list(&L1);
printf("逆序后的顺序表如下:");
print_list(&L1);
break;
}
case 2:
{
set_null(&L2);
input_list(&L2);
printf("输入要插入的数据:");
scanf("%d", &x);
insert(&L2, x);
printf("插入后的顺序表元素如下:");
print_list(&L2);
break;
}
case 3:
{
set_null(&L3);
input_list(&L3);
printf("输入要删除的数据的位置:");
scanf("%d", &x);
delete_list(&L3, x);
printf("删除后的顺序表元素如下:");
print_list(&L3);
break;
}
default:
{
printf("the input is error!!!");
}
}
}
C文件:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include "my_list.h"
//文件功能:实现线性表的基本运算
//1:顺序表的插入预算
//2:顺序表中元素的逆序
//3:顺序表的删除运算
void set_null(data_list *L);
void reversr_list(data_list *L); //函数功能 :逆序一个数组
void insert(data_list *L, int x);
void delete_list(data_list *L, int i); // 函数功能:实现线性表 某一个值删除的运算// 参数:结构体指针,所删除元素的下标
void input_list(data_list *L);
void print_list(data_list *L);
int init();
int main()
{
init();
return 0;
}
#endif
相关文章推荐
- js unicode 编码解析关于数据转换为中文的两种方法
- 观察者模式
- SQL中N+1问题已经MyBaits中的解决方案
- VMWare Workstation中实现Win7和linux虚拟机之间的文件共享
- lua 表赋值是引用关系
- nyoj 325 zb的生日【0-1背包】
- String
- java路径问题总结
- 一个jQuery事件绑定的问题
- 杨辉三角形
- hdoj 1203 I NEED A OFFER!【0-1背包+逆向思维】
- float类型进行计算精度丢失的问题
- LINUX内核分析第七周——可执行程序的装载
- ssl2334 铲雪车
- 约瑟夫环问题
- Java中resourceBundle和Properties的区别
- bootstrap 下拉菜单精简版
- 创业公司和大公司的差异
- document.frame
- nyoj 890 又见01背包【0-1背包+逆向思维】