数据结构--顺序表

思维导图

头文件:

#ifndef _HEAD_H_
#define _HEAD_H_

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

enum type
{
	FALUSE=-1,//用于返回失败值
	SUCCESS//用于返回成功值
};

#define MAXSIZE 12

typedef int datatype;

typedef struct sqlist
{
	datatype date[MAXSIZE];
	int len;
}*sqlist;

sqlist create_sqlist();
int output(sqlist list);
int insert_rear(sqlist list,datatype element);
int delete_rear(sqlist list);
int search_index(int index,sqlist list);
int change_index(int index,int element,sqlist list);
int delete_index(int index,sqlist list);
int add_index(int index,int element,sqlist list);
int delete_element(datatype element,sqlist list);                                            
int found_element(datatype element,sqlist list);                                                         
int change_element(datatype element1,datatype element2,sqlist list);
int de_rep(sqlist list);
int sort(sqlist list);  

#endif

自定义文件:

#include "head.h"
sqlist create_sqlist()
{
	sqlist list=(sqlist)malloc(sizeof(struct sqlist));
	if(NULL==list)
	{
		return NULL;
	}

	bzero(list->date,sizeof(list->date));
	//对数据元素清零
	list->len=0;
	//对顺序长度清零
	return list;
	//返回顺序表
}


int insert_rear(sqlist list,datatype element)
{
	//判断顺序表是否为满或者NULL
	if(NULL==list || list->len==MAXSIZE)
	{
		printf("sqlist full..\n");
		return FALUSE;//-1
	}
	list->date[list->len]=element;
	//在顺序表插入后元素多一个,顺序表长度自增加一
	list->len++;
	return SUCCESS;
}


int output(sqlist list)
{   
	//判断顺序表是否为NULL
	//判断顺序表是否为空
	if(NULL==list || list->len==0)
	{
		printf("sqlist empty..\n");
		return FALUSE;
	}
	//循环输出
	for(int i=0;i<list->len;i++)
	{
		printf("%d ",list->date[i]);
	}
	printf("\n");
	return SUCCESS;
}




int delete_rear(sqlist list)
{
	//判断顺序表是否为NULL
	//判断顺序表是否为空
	if(NULL==list || list->len==0)
	{
		printf("sqlist empty..\n");
		return FALUSE;
	}
	//删除len-1对应的值
	list->len--;
	return SUCCESS;
}

int search_index(int index,sqlist list)
{
	//判断顺序表是否为空,NULL,index下标是否合法
	if(NULL==list || list->len==0 || index<0 || index>=list->len)
	{
		printf("search_index error..\n");
		return FALUSE;
	}
	printf("search_index data is:%d\n",list->date[index]);
	return SUCCESS;
}

int change_index(int index,int element,sqlist list)
{
	if(NULL==list || list->len==0 || index<0 || index>=list->len)
	{
		printf("change_index error..\n");
		return FALUSE;
	}
	list->date[index]=element;
	printf("change_index data is:%d\n",list->date[index]);
	output(list);
	return SUCCESS;
}

int delete_index(int index,sqlist list)
{
	if(NULL==list || list->len==0 || index<0 || index>=list->len)
	{
		printf("delete_index error..\n");
		return FALUSE;
	}
	for(int i=index;i<list->len-1;i++)
	{
		list->date[i]=list->date[i+1];
	}
	list->len--;
	output(list);
	return SUCCESS;
}

int add_index(int index,int element,sqlist list)
{
	if(NULL==list || list->len==MAXSIZE || index<0 || index>list->len)
	{
		printf("add_index error..\n");
		return FALUSE;
	}
	for(int i=list->len-1;i>=index;i--)
	{
		list->date[i+1]=list->date[i];
	}
	list->date[index]=element;
	list->len++;
	output(list);
	return SUCCESS;
}


int delete_element(datatype element,sqlist list)
{
	int index=-1;
	for(int i=0;i<list->len;i++)
	{
		if(list->date[i]==element)
		{
			index=i;
			delete_index(index,list);
		}
	}
	if(index==1)
	{
		printf("未找到删除目标元素\n");
		return FALUSE;
	}
	return SUCCESS;
}

int found_element(datatype element,sqlist list)
{
	int num=0;
	for(int i=0;i<list->len;i++)     
	{                                
		if(list->date[i]==element)   
		{                            
			printf("list->date[%d}=%d\n",i,element);
			num++;
		}                            
	}
	if(num==0)
	{
		printf("未找到目标元素\n");
		return FALUSE;
	}
	return SUCCESS;
}                          



int change_element(datatype element1,datatype element2,sqlist list)
{
	int num=0;                                        
	for(int i=0;i<list->len;i++)                         
	{                                                    
		if(list->date[i]==element1)                       
		{                                                
			list->date[i]=element2;     
			num++;                                       
		}                                                
	}                                                    
	if(num==0)                                           
	{                                                    
		printf("未找到目标元素\n");                      
		return FALUSE;                                   
	}                                                    
	output(list);
	return SUCCESS;                                      
}                                                     


int de_rep(sqlist list)
{
	printf("执行去重操作:");
	for(int i=0;i<list->len;i++)
	{
		for(int j=i+1;j<list->len;j++)
		{
			if(list->date[i]==list->date[j])  
			{
				//删除j对应的值
				delete_index(j,list);
				j--;               
			}              
		}       
	}
	return SUCCESS;
}

int sort(sqlist list)
{
	int temp;
	printf("执行顺序排序后结果为:");
	for(int i=0;i<list->len-1;i++)
	{
		for(int j=0;j<list->len-i-1;j++)
		{
			if(list->date[j]>list->date[j+1])
			{
				temp=list->date[j];
				list->date[j]=list->date[j+1];
				list->date[j+1]=temp;
			}
		}
	}
	output(list);
	return SUCCESS;
}

主函数文件:

#include "head.h"
int main(int argc, const char *argv[])
{
	//定义一个顺序表
	sqlist list= create_sqlist();
	//顺序表尾部插入
	datatype element;//插入的值
	for(int i=0;i<MAXSIZE;i++)
	{
		printf("please enter element:");
		scanf("%d",&element);
		insert_rear(list,element);
	}
	//3、循环打印顺序表
	output(list);
	//4、尾部删除
	delete_rear(list);
	delete_rear(list);
	printf("\ndelete_rear date is:\n");
	output(list);

	//5.按下标查找
	int index;
	printf("please enter find index:");
	scanf("%d",&index);
	search_index(index,list);

	//6.按下标修改
	printf("please enter change index:");
	scanf("%d",&index);
	printf("please enter change element:");
    scanf("%d",&element);
	change_index(index,element,list);

	//7.按下标删除
	printf("please enter delete index:");
	scanf("%d",&index);
	delete_index(index,list);

	//8.按下标插入
	printf("please enter add index:");
	scanf("%d",&index);
	printf("please enter add element:");
	scanf("%d",&element);
	add_index(index,element,list);

	//9.按元素删除
	printf("please enter delete element:");
    scanf("%d",&element);
	delete_element(element,list);
	
	//10.按元素查找
	printf("please enter found element:");
	scanf("%d",&element);
	found_element(element,list);
    
	//11.按元素修改
	int element1,element2;
	printf("please enter be changed element1:");
	scanf("%d",&element1);
	printf("please enter change element2:");
	scanf("%d",&element2);
	change_element(element1,element2,list);
	
	//12.去重
	de_rep(list);

    //顺序表排序
	sort(list);
	return 0;
}

代码运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值