資料結構(一):順序表的基本操作 C語言
阿新 • • 發佈:2018-11-28
順序表
標頭檔案: Sqlist.h
#include<stdio.h> #include<stdlib.h> #define SIZE 15 #pragma once typedef struct Sqlist { int elem[SIZE]; int usedsize; //有效長度 } Sqlist, *Psqlist; void InitSqlist(Psqlist List) ;//初始化 bool IsFull(Psqlist List);//判斷是否為滿 bool InsertVal(Psqlist List, int pos,int val);//線上性表中pos位置插入val值 bool DeleteVal(Psqlist List,int pos, int *val);//刪除線性表的pos位置的值,並返回其val值 int FindVal(Psqlist List,int val);//查詢線性表中與val值相同的元素,如果存在返回序號,不存在返回0表示失敗 bool GetVal(Psqlist List,int pos,int*val);//將pos位置的值返回給val void Clear(Psqlist List);//清空線性表 int GetLength(Psqlist List); //得到線性表長度 void Show(Psqlist List); //列印線性表有效值
Sqlist.cpp
#include<stdio.h> #include<assert.h> #include"Sqlist.h" void InitSqlist(Psqlist List) { assert(List!=NULL); if(List == NULL) { return ; } List->usedsize = 0; } bool IsFull(Psqlist List) //static bool IsFull { assert(List!=NULL); if(List->usedsize == SIZE) { return true; } else { return false; } } /*插入元素*/ /* 1.線性表長度 ,超過陣列長度,丟擲異常 or 動態擴容 2.插入位置不對,丟擲異常 3.將線性表元素從後向前遍歷到pos位置,向後挪一位,將val值插入到Pos位置 */ bool InsertVal(Psqlist List, int pos,int val) { assert(List!=NULL); if(pos>=SIZE) { printf("The Size Is Not Enough"); return false; } for(int i =List->usedsize;i>=pos;i--) { List->elem[i+1] = List->elem[i]; } List->elem[pos] = val; List->usedsize++; //記得要給usedsize +1!!! return true; } /*刪除元素*/ bool DeleteVal(Psqlist List,int pos, int *val) //刪除線性表的pos位置的值,並返回其val值 { assert(List!=NULL); if(List->elem[pos] == NULL) { return false; } else { *val= List->elem[pos]; for(int i = pos; i <List->usedsize ;i++) { List->elem[i] = List->elem[i+1]; } List->usedsize --; //記得成功刪除後給usedsize-1 return true; } } /*查詢元素*/ int FindVal(Psqlist List,int val)//查詢線性表中與val值相同的元素,如果存在返回序號,不存在返-1表示失敗 { assert(List!=NULL); for(int i =0;i<List->usedsize;i++) { if(List->elem[i] == val) { return i; } } return -1; } /*得到元素*/ bool GetVal(Psqlist List,int pos,int*val)//將pos位置的值返回給val { assert(List!=NULL); if(pos>List->usedsize || pos<0) { return false; } else { *val =List->elem[pos]; printf("%d",*val); // 之前錯誤: &val ,打印出的是地址 ,應該傳遞的是指標直接指向該值 哎呀傻了我!!!記住 } return true; } void Clear(Psqlist List)//清空線性表 { List->usedsize = 0; } int GetLength(Psqlist List) //得到線性表長度 { assert(List!=NULL); return List->usedsize; } void Show(Psqlist List) //列印線性表有效值 { assert(List!=NULL); for(int i= 0;i<List->usedsize;i++) { printf("%d\n",List->elem[i]); } } int main() { Sqlist List; InitSqlist(&List); for(int i =0;i<5;i++) { InsertVal(&List,i,i); } InsertVal(&List,5,9); int val ; //DeleteVal(&List,2,&val); //printf("the deletevalon pos 2 is %d\n",val); //printf("the length of the List is %d\n",GetLength(&List)); //printf("the val which is same with 9 is on the pos %d\n",FindVal(&List,9)); //Show(&List); //Clear(&List); GetVal(&List,5,&val); //printf("the val on the pos 5 is %d",val); Show(&List); getchar(); return 0; }