C語言實現順序表
阿新 • • 發佈:2019-09-26
大二學習資料結構和演算法啦,因為之前用Java語言實現過,所以理解起來還是比較輕鬆,就是理解陣列與結構體的運用。廢話不多說,上程式碼!
結構體
typedef struct { int *data; int Maxsz; int len; } SeqList;
初始化
void InitList (SeqList *L, int maxsz) {//初始化 L->Maxsz = maxsz; L->data = (int*)malloc(sizeof(int)*maxsz);//動態分配儲存空間,相當於 new L->len = 0; }
增刪改查插
int AddList(SeqList *L, int x) { //增加 if(L->len >= L->Maxsz) { return 0; } L->data[L->len] = x; L->len++; return 1; } int DelList(SeqList *L, int index) {//刪除 if(index >= L->Maxsz) { return 0; } int i=0; for(i = index; i < L->Maxsz; i++) { L->data[i] = L->data[i+1]; } L->len--; return 1; } int Update(SeqList *L, int oldda, int newda) {//修改 int i,flag = 0; for(i = 0; i < L->Maxsz; i++) { if(L->data[i] == oldda) { flag = 1; break; } } if(flag == 1) { L->data[i] = newda; return 1; } else { return 0; } } int Insert(SeqList *L, int index, int data) { //插入1 int i; int len = L->len - 1; if(len+1 > L->Maxsz) { return 0; } for(i = len; i >= index; i--) { L->data[i+1] = L->data[i]; } L->data[index] = data; L->len++; return 1; } int InsertList(SeqList *L, int index, int data) {//插入2 int i; if(index < 0 || index > L-> len - 1) { return 0; } if(L->len == L->Maxsz) { return 0; } for(i=L->len-1; i>=index; i--){ L->data[i+1] = L->data[i]; } L->data[index] = data; L->len++; return 1; }
還有一些小方法,銷燬,取長,清空
void DestoryList(SeqList *L) {//銷燬順序表 free(L->data); } int ListLength(SeqList *L) {//獲取長度 return L->len; } void ClearList(SeqList *L) {//清空順序表 L->len=0; }
全部程式碼
#include<stdio.h> typedef struct { int *data; int Maxsz; int len; } SeqList; void DestoryList(SeqList *L) {//銷燬順序表 free(L->data); } int ListLength(SeqList *L) {//獲取長度 return L->len; } void ClearList(SeqList *L) {//清空順序表 L->len=0; } void InitList (SeqList *L, int maxsz) {//初始化 L->Maxsz = maxsz; L->data = (int*)malloc(sizeof(int)*maxsz);//動態分配儲存空間,相當於 new L->len = 0; } int AddList(SeqList *L, int x) { //增加 if(L->len >= L->Maxsz) { return 0; } L->data[L->len] = x; L->len++; return 1; } int DelList(SeqList *L, int index) {//刪除 if(index >= L->Maxsz) { return 0; } int i=0; for(i = index; i < L->Maxsz; i++) { L->data[i] = L->data[i+1]; } L->len--; return 1; } int Update(SeqList *L, int oldda, int newda) {//修改 int i,flag = 0; for(i = 0; i < L->Maxsz; i++) { if(L->data[i] == oldda) { flag = 1; break; } } if(flag == 1) { L->data[i] = newda; return 1; } else { return 0; } } int Insert(SeqList *L, int index, int data) { //插入1 int i; int len = L->len - 1; if(len+1 > L->Maxsz) { return 0; } for(i = len; i >= index; i--) { L->data[i+1] = L->data[i]; } L->data[index] = data; L->len++; return 1; } int InsertList(SeqList *L, int index, int data) {//插入2 int i; if(index < 0 || index > L-> len - 1) { return 0; } if(L->len == L->Maxsz) { return 0; } for(i=L->len-1; i>=index; i--){ L->data[i+1] = L->data[i]; } L->data[index] = data; L->len++; return 1; } void display(SeqList *L) {//顯示 int i; for(i=0; i < L->len; i++) { printf("%d\n", L->data[i]); } } int main() { SeqList sl; InitList(&sl, 6); AddList(&sl,0); AddList(&sl,1); AddList(&sl,2); AddList(&sl,3); AddList(&sl,5); Insert(&sl,4,4); //AddList(&sl,5); //Update(&sl, 5, 6); //DelList(&sl,4); display(&sl); return 0; }
&n