關於數據結構的詳細介紹,自己總結的 ,勿噴。謝謝
/*
============================================================
================
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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.