關於數據結構的詳細介紹,自己總結的 ,勿噴。謝謝

/*




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


================
 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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章