大二学习数据结构和算法啦,因为之前用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 ", 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; }