静态与动态顺序表操作的C语言实现
2016-09-26 14:18
411 查看
1.操作静态顺序表
#include<stdio.h> #include<stdlib.h> #define MAXSIZE 10 //插入 void InsertElem(int sqlist[], int *len, int i, int a) { int t; if ((i<1) || (i>*len+1) || (*len == MAXSIZE)) //超出删除范围 { printf("\nillegal\n"); return; } for (t = *len - 1; t >= i-1; t--) { sqlist[t + 1] = sqlist[t]; //从最后一个元素开始依次向后移动一位,直到移动完成要插入的位置的元素 } sqlist[i - 1] = a; (*len)++; } //删除 void DelElem(int sqlist[], int *len, int i) { int t; if ((i<0) || (i>*len)) { printf("\nillegal\n"); return; } for (t = i; t <= *len - 1; t++) { sqlist[t - 1] = sqlist[t]; //从将要删除的元素的位置的下一个位置开始,将元素依次向前移动一位 } (*len)--; } int main() { int sqlist[MAXSIZE]; int len = 6;//初始表长度; int i; printf("current numbers:>"); for (i = 0; i < len; i++) { sqlist[i] = i + 1; printf("%d ", sqlist[i]); } printf("\ncurrent length:%d",len); printf("\n在第3个位置插入0:"); InsertElem(sqlist, &len, 3, 0); for (i = 0; i < len; i++) printf("%d ", sqlist[i]); printf("\ncurrent length:%d", len); printf("\n在第11个位置插入元素:\n"); InsertElem(sqlist, &len, 11, 0); printf("\n删除第3个元素:"); DelElem(sqlist, &len, 3); for (i = 0; i < len; i++) printf("%d ", sqlist[i]); printf("\ncurrent length:%d", len); printf("\n删除第11个元素:"); DelElem(sqlist, &len, 11); system("pause"); return 0; }
2.操作动态顺序表
#include<stdio.h> #include<stdlib.h> #define MAXSIZE 10 //创建 typedef struct sqlist { int *elem; int length;// 当前表长 int listsize;//当前表的最大长度 }sqlist; //初始化 void InitSqlist(sqlist *L) { L->elem = (int *)malloc(MAXSIZE*sizeof(int));//开辟能存放最大元素个数的空间 if (L->elem == NULL) { perror("error:"); return; } L->length = 0; L->listsize = MAXSIZE; } //插入 void InsertElem(sqlist *L, int i, int a) { int *base = NULL; int *insertptr = NULL; int *p = NULL; if ((i < 1) || (i > L->length + 1)) { printf("illegal"); return; } if (L->length >= L->listsize) { base = (int *)realloc(L->elem, (L->listsize + 10)*sizeof(int)); if (base == NULL) { free(L->elem); return; } else { L->elem = base; L->listsize = L->listsize + 10; } } insertptr = &(L->elem[i - 1]);//当前要插入的元素的位置 for (p = &(L->elem[L->length - 1]); p >= insertptr; p++) *(p + 1) = *p; *insertptr = a; (L->length)++; } //删除 void DelElem(sqlist *L, int i) { int *p; if ((i<0) || (i > L->length)) { printf("illegal"); return; } for (p = &(L->elem[i]); p <= &(L->elem[L->length - 1]); p++) *(p - 1) = *p; (L->length)--; } int main() { sqlist l; int i; InitSqlist(&l);//初始化顺序表l for (i = 0; i < 15; i++)//插入15个元素 InsertElem(&l, i + 1, i + 1); printf("current elements:"); for (i = 0; i < l.length; i++) printf("%d ", l.elem[i]); DelElem(&l, 3);//删除第3个元素 printf("\n删除第3个元素:"); for (i = 0; i < l.length; i++) printf("%d ", l.elem[i]); printf("\n删除第16个元素:"); DelElem(&l, 16);//非法删除 system("pause"); return 0; }
相关文章推荐
- 顺序表静态与动态实现及基本的操作(增删查改等)
- 【C语言】静态顺序表和动态顺序表的实现
- c语言实现--顺序表操作
- c语言实现动态顺序表
- c语言顺序表动态实现
- C语言实现动态顺序表
- C语言实现顺序表基本操作汇总
- C语言实现动态顺序表
- 用C语言实现静态顺序表
- 动态分配的顺序线性表的十五种操作—C语言实现
- C语言——静态顺序表常见操作
- 利用C语言实现动态顺序表
- c语言实现动态顺序表
- 【数据结构】C语言实现顺序表(静态顺序表)
- 简单实现静态/动态顺序表
- 动态单链表的传统存储方式和10种常见操作-C语言实现
- 静态和动态顺序表的实现(c语言)
- C语言实现动态顺序表
- 动态分配的顺序线性表的十五种操作—C语言实现
- C语言:静态顺序表的实现和相关操作