/*
============================================================
================
Name : D_SeqList.c
Author : 谷建鹏
Version :
Copyright : Your copyright notice
Description : Hello World in C, Ansi-style
============================================================
================
*/
#include <stdio.h>
#include <stdlib.h>
typedef int Datetype; //将int 类型重新定义一个新的类型
#define Max_Size 100 //定义他的长度为100
/*
* 创建结构体
*/
typedef struct SeqList{ //定义数据区,用来存放线性表数据//int data[100];
Datetype data[Max_Size]; //定义线性表的一个长度的变量
Datetype SeqLength;
}SList; //(=>)// 最后的一步(=>)就相当于 typedef struct SeqList SList;
/*
*功能: 创建线性表
*/
SList * Create_SeqList(){
//printf("%d",sizeof(SList)); //结构体变量 //申请一个长度为404的内存单元
//返回值为(void *)要让list指向这个空间,要强制转化
/*
*malloc 函数 如果执行成功 ,返回新申请的这片内存单元的首地址
* malloc 函数 如果执失败,返回NULL
*
*/
SList *List = (SList *)malloc(sizeof(SList)); // //list 指针(指向结构体)
if(List != NULL){ // //判断您内存是否申请成功
printf("恭喜您线性表创建成功~~\n");
List->SeqLength = 0; list设置线性表为空
return List;
}else{
printf("线性表创建成功~~\n");
return NULL;
}
}
/*
* 判断list是否为空,如果为空说明线性表不存在
*判断线性表是否为一个空表(list->SeqLength==0)
*不为空,可以输出线性表的内容
*/
/*
* 功能:打印线性表中的内容
*/
void Print_SeqList(SList *list){
if(list != NULL){ 1、判断list是否为空,如果为空说明线性表不存在
if(list->SeqLength){
int i;
for(i=0;i<list->SeqLength;i++){
printf("%d\t",list->data[i]);
}
printf("\n");
}else{
printf("线性表创建成功!!\n");
}
}else{
printf("线性表创建失败~~\n");
}
}
/*
*
* 插入新的数据到线性表
* 返回值:void
* 参数 : (Slist *list, location,DataType date)
*1. 判断list是否为空,如果为空说明线性表不存在
*2. 判断线性表是否已满(list->SeqLength==MAX_SIZE)
*3.判断的位置是否合理合法
*4 。 如果位置合法,要开始执行插入
*5 。需要 n-i+1次 (i是第i个元素)
*
*
*
*/
void Insert_SeqList(SList *list,int location,Datetype data){
if(list != NULL){ //1、判断list是否为空,如果为空说明线性表不存在
if(list->SeqLength==Max_Size){
printf("线性表已满~~\n");
}
if(list->SeqLength<0||list->SeqLength>Max_Size){
printf("!!!!!!!!!!!!!!!不合法的~~\n");
}else{
int i;
for(i=list->SeqLength-1;i>=location;i--){
list->data[i+1] = list->data[i];
printf("%d",list->data[i]);
}
list->data[location] = data;
list->SeqLength ++;
}
}else{
printf("创建线性表不存在~~\n");
}
}
/*
*功能:删除线性表中的内容
*/
void delete_SeqList(SList *list,int location){
if(list != NULL){
if(list->SeqLength>0||list>list->SeqLength){
int i;
for(i=location;i<list->SeqLength-1;i++){
list->data[i] =list->data[i+1];
}
list->SeqLength--;
}
}else{
printf("创建线性表不存在~~\n");
}
}
/*
* 功能:修改线性表中的内容
*/
void modify_SeqList(SList *list,int location,Datetype data){
if(list != NULL){
if(list->SeqLength==Max_Size){
printf("该线性表已满\n");
}else{
if(list->SeqLength > 0 || list->SeqLength < Max_Size){
list->data[location] = data;
}else{
printf("您这是不合法的\n");
}
}
}else{
printf("该线性表不存在\n");
}
}
/*
* 功能:根据位置查找
*/
void searchByLocation(SList *list,int location){
if(list != NULL){
printf("%d\n",list->data[location]);
}else{
printf("线性表不存在\n");
}
}
/*
* 功能:根据内容查找
*/
void searchByDate(SList *list,Datetype data){
if(list != NULL){
int i,a;
for(i=0;i<list->SeqLength-1;i++){
if(list->data[i] == data){
a=1;
}
}
if(a==1){
printf("%d在线性表的第%d个元素\n",data,i);
}else{
printf("对不起 你搜索的内容不存在\n");
}
}else{
printf("线性表不存在\n");
}
}
/*
* 功能:倒叙输出
*/
void FlashBackPrint(SList *list){
if(list != NULL){
int i;
for(i=list->SeqLength-1;i>=0;i--){
printf("%d\t",list->data[i]);
}
}else{
printf("线性表不存在\n");
}
}
/*
* 功能:由大到小排序
*/
void sizePrint(SList *list){
if(list != NULL){ //判断是否为空
int i,j;
for(i=0;i<list->SeqLength;i++){
for(j=i+1;j<list->SeqLength;j++){
if(list->data[i] < list->data[j]){
int temp = list->data[i];
list->data[i] =list->data[j];
list->data[j] =temp;
}
}
}
for(i=0;i<4;i++){
printf("%d\t",list->data[i]);
}
}else{
printf("线性表不存在\n");
}
}
int main(void) {
Datetype *List = Create_SeqList();
printf("插入线性表:\n");
Insert_SeqList(List,0,34);
Insert_SeqList(List,1,87);
Insert_SeqList(List,2,97);
Insert_SeqList(List,3,29);
Insert_SeqList(List,4,74);
Insert_SeqList(List,5,84);
Insert_SeqList(List,6,14);
Print_SeqList(List);
printf("修改线性表:\n"); //对上面进行修改;
modify_SeqList(List,2,77); //对上面进行修改; 将Insert_SeqList(List,2,97)改为modify_SeqList(List,2,77);
Print_SeqList(List);
printf("删除线性表:\n"); //删除
delete_SeqList(List,3); //删除Insert_SeqList(List,3,29);
Print_SeqList(List);
printf("根据位置查找:\n"); //查找;searchByLocation(List,1);
searchByLocation(List,1);
printf("根据内容查找:\n"); // 根据内容找;searchByDate(List,20);
searchByDate(List,20);
printf("倒叙输出:\n"); //倒序输出;FlashBackPrint(List);
FlashBackPrint(List);
printf("\n由大到小排序:\n"); //从大到小排序;sizePrint(List);
sizePrint(List);
free(List);
return EXIT_SUCCESS;
}
============================================================
================
Name : D_SeqList.c
Author : 谷建鹏
Version :
Copyright : Your copyright notice
Description : Hello World in C, Ansi-style
============================================================
================
*/
#include <stdio.h>
#include <stdlib.h>
typedef int Datetype; //将int 类型重新定义一个新的类型
#define Max_Size 100 //定义他的长度为100
/*
* 创建结构体
*/
typedef struct SeqList{ //定义数据区,用来存放线性表数据//int data[100];
Datetype data[Max_Size]; //定义线性表的一个长度的变量
Datetype SeqLength;
}SList; //(=>)// 最后的一步(=>)就相当于 typedef struct SeqList SList;
/*
*功能: 创建线性表
*/
SList * Create_SeqList(){
//printf("%d",sizeof(SList)); //结构体变量 //申请一个长度为404的内存单元
//返回值为(void *)要让list指向这个空间,要强制转化
/*
*malloc 函数 如果执行成功 ,返回新申请的这片内存单元的首地址
* malloc 函数 如果执失败,返回NULL
*
*/
SList *List = (SList *)malloc(sizeof(SList)); // //list 指针(指向结构体)
if(List != NULL){ // //判断您内存是否申请成功
printf("恭喜您线性表创建成功~~\n");
List->SeqLength = 0; list设置线性表为空
return List;
}else{
printf("线性表创建成功~~\n");
return NULL;
}
}
/*
* 判断list是否为空,如果为空说明线性表不存在
*判断线性表是否为一个空表(list->SeqLength==0)
*不为空,可以输出线性表的内容
*/
/*
* 功能:打印线性表中的内容
*/
void Print_SeqList(SList *list){
if(list != NULL){ 1、判断list是否为空,如果为空说明线性表不存在
if(list->SeqLength){
int i;
for(i=0;i<list->SeqLength;i++){
printf("%d\t",list->data[i]);
}
printf("\n");
}else{
printf("线性表创建成功!!\n");
}
}else{
printf("线性表创建失败~~\n");
}
}
/*
*
* 插入新的数据到线性表
* 返回值:void
* 参数 : (Slist *list, location,DataType date)
*1. 判断list是否为空,如果为空说明线性表不存在
*2. 判断线性表是否已满(list->SeqLength==MAX_SIZE)
*3.判断的位置是否合理合法
*4 。 如果位置合法,要开始执行插入
*5 。需要 n-i+1次 (i是第i个元素)
*
*
*
*/
void Insert_SeqList(SList *list,int location,Datetype data){
if(list != NULL){ //1、判断list是否为空,如果为空说明线性表不存在
if(list->SeqLength==Max_Size){
printf("线性表已满~~\n");
}
if(list->SeqLength<0||list->SeqLength>Max_Size){
printf("!!!!!!!!!!!!!!!不合法的~~\n");
}else{
int i;
for(i=list->SeqLength-1;i>=location;i--){
list->data[i+1] = list->data[i];
printf("%d",list->data[i]);
}
list->data[location] = data;
list->SeqLength ++;
}
}else{
printf("创建线性表不存在~~\n");
}
}
/*
*功能:删除线性表中的内容
*/
void delete_SeqList(SList *list,int location){
if(list != NULL){
if(list->SeqLength>0||list>list->SeqLength){
int i;
for(i=location;i<list->SeqLength-1;i++){
list->data[i] =list->data[i+1];
}
list->SeqLength--;
}
}else{
printf("创建线性表不存在~~\n");
}
}
/*
* 功能:修改线性表中的内容
*/
void modify_SeqList(SList *list,int location,Datetype data){
if(list != NULL){
if(list->SeqLength==Max_Size){
printf("该线性表已满\n");
}else{
if(list->SeqLength > 0 || list->SeqLength < Max_Size){
list->data[location] = data;
}else{
printf("您这是不合法的\n");
}
}
}else{
printf("该线性表不存在\n");
}
}
/*
* 功能:根据位置查找
*/
void searchByLocation(SList *list,int location){
if(list != NULL){
printf("%d\n",list->data[location]);
}else{
printf("线性表不存在\n");
}
}
/*
* 功能:根据内容查找
*/
void searchByDate(SList *list,Datetype data){
if(list != NULL){
int i,a;
for(i=0;i<list->SeqLength-1;i++){
if(list->data[i] == data){
a=1;
}
}
if(a==1){
printf("%d在线性表的第%d个元素\n",data,i);
}else{
printf("对不起 你搜索的内容不存在\n");
}
}else{
printf("线性表不存在\n");
}
}
/*
* 功能:倒叙输出
*/
void FlashBackPrint(SList *list){
if(list != NULL){
int i;
for(i=list->SeqLength-1;i>=0;i--){
printf("%d\t",list->data[i]);
}
}else{
printf("线性表不存在\n");
}
}
/*
* 功能:由大到小排序
*/
void sizePrint(SList *list){
if(list != NULL){ //判断是否为空
int i,j;
for(i=0;i<list->SeqLength;i++){
for(j=i+1;j<list->SeqLength;j++){
if(list->data[i] < list->data[j]){
int temp = list->data[i];
list->data[i] =list->data[j];
list->data[j] =temp;
}
}
}
for(i=0;i<4;i++){
printf("%d\t",list->data[i]);
}
}else{
printf("线性表不存在\n");
}
}
int main(void) {
Datetype *List = Create_SeqList();
printf("插入线性表:\n");
Insert_SeqList(List,0,34);
Insert_SeqList(List,1,87);
Insert_SeqList(List,2,97);
Insert_SeqList(List,3,29);
Insert_SeqList(List,4,74);
Insert_SeqList(List,5,84);
Insert_SeqList(List,6,14);
Print_SeqList(List);
printf("修改线性表:\n"); //对上面进行修改;
modify_SeqList(List,2,77); //对上面进行修改; 将Insert_SeqList(List,2,97)改为modify_SeqList(List,2,77);
Print_SeqList(List);
printf("删除线性表:\n"); //删除
delete_SeqList(List,3); //删除Insert_SeqList(List,3,29);
Print_SeqList(List);
printf("根据位置查找:\n"); //查找;searchByLocation(List,1);
searchByLocation(List,1);
printf("根据内容查找:\n"); // 根据内容找;searchByDate(List,20);
searchByDate(List,20);
printf("倒叙输出:\n"); //倒序输出;FlashBackPrint(List);
FlashBackPrint(List);
printf("\n由大到小排序:\n"); //从大到小排序;sizePrint(List);
sizePrint(List);
free(List);
return EXIT_SUCCESS;
}