自打在知乎上看到思否这个平台后,就总想写点什么;也想与更多的人交流,学一点东西。
学校数据结构授课用的教材是严蔚敏老师的《数据结构(C语言版)》,教材将介于伪码和C语言之间的类C语言作为描述工具讲解算法,在实际学习中,还是需要我们把代码转换成C语言程序,编译通过。这个过程才能帮助更好地理解算法。
我开通博客的目的也在于此,将自己复现的代码和完成的课后习题记录下来,与大家分享交流;偶尔也分享一些自己对一些开源项目的学习理解。
第一次的内容非常简单,顺序表的基本操作。主要包括了:
- 构建空表
- 插入元素
- 删除元素
- 查找元素
功能简单,编译时遇到的困难也较少。
#include<stdio.h>
#include<stdlib.h>
#include "malloc.h"
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef int Status;
typedef struct{
int *elem;
int length;
int listsize;
}SqList;
Status InitList_Sq(SqList &L){
//构造空表
L.elem = (int *)malloc(LIST_INIT_SIZE * sizeof(int));
if(!L.elem)exit(OVERFLOW);
L.length = 0;
L.listsize = LIST_INIT_SIZE;
return OK;
}
Status ListInsert_Sq(SqList &L,int i){
//在顺序表的第i个位置插入键盘输入的数
int* p,* q,e;
if(i < 1 || i > L.length + 1)return ERROR;
if(L.length >= L.listsize){
int* newbase = (int*)realloc(L.elem,(L.listsize + LISTINCREMENT) * sizeof(int));
if(!newbase)exit(OVERFLOW);
L.elem = newbase;
L.listsize += LISTINCREMENT;
}
q = &(L.elem[i-1]);
for(p = &(L.elem[L.length-1]);p >= q;--p) *(p+1) = *p;
scanf("%d",&e); //键盘输入值赋给e
*q = e;
++ L.length;
return OK;
}
Status List_Print(SqList L){
//打印顺序表中的数
for(int r = 0;r < L.length;r++)printf("%d ",L.elem[r]);
printf("\n");
}
Status List_Search(SqList L){
//查找顺序表
int i;
scanf("%d",&i);
if(i < 1 || i > L.length + 1)return ERROR;
printf("您查找的数是:%d \n",L.elem[i-1]);
}
Status ListDelete_Sq(SqList &L){
//删除指定的数,并用e返回
int* p,* q;
int i,e;
scanf("%d",&i);
if(i < 1 || i > L.length + 1)return ERROR;
p = &(L.elem[i-1]);
e = *p;
q = L.elem + L.length - 1;
for(++p;p <= q;++p)*(p-1) = *p;
--L.length;
printf("%d被删除了\n",e);
return OK;
}
int main()
{
SqList L;
InitList_Sq(L);
printf("请为顺序表输入4个整数:\n");
for(int a = 1;a <= 4;a++)ListInsert_Sq(L,a);
printf("现有的顺序表为:\n");
List_Print(L);
printf("请输入要查找的位置\n");
List_Search(L);
printf("请输入插入的位置和数(用换行分开):\n");
int a;
scanf("%d",&a);
ListInsert_Sq(L,a);
printf("现有的顺序表为:\n");
List_Print(L);
printf("请输入要删除的位置\n");
ListDelete_Sq(L);
printf("现有的顺序表为:\n");
List_Print(L);
return 0;}
所用的编译器是dev c++.
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。