关于数据结构的详细介绍,自己总结的 ,勿喷。谢谢

来源:互联网 发布:印度崛起 知乎 编辑:程序博客网 时间:2024/05/18 23:14
/*




============================================================


================
 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;
}
0 0
原创粉丝点击