理清解题逻辑,实现代码时注意不要跳跃思考,出现细节错误将导致程序不符合题解。
OJ练习
顺序表添加删除元素
初始化顺序表(顺序表中元素为整型),里边的元素是1,2,3,然后读取一个元素(假如插入的是6),插入到第2个位置,打印输出顺序表,每个元素占3个空格,格式为1 6 2 3。然后scanf读取一个整型数,是删除的位置(假如输入为1),然后输出顺序表 6 2 3,假如输入的位置不合法,输出false字符串。
#include <stdio.h>
#define MaxSize 100
typedef int ElemType;
typedef struct {
ElemType data[MaxSize];
int length;
} SqList;
void InsertList(SqList &L, ElemType element) {
for (int i = L.length; i >= 2; i--) {
L.data[i] = L.data[i - 1];
}
L.data[1] = element;
L.length++;
}
bool DeleteList(SqList &L, int i) {
if (i < 0 || i > L.length) return false;
for (int j = i; j <= L.length; j++) {
L.data[j - 1] = L.data[j];
}
L.length--;
return true;
}
void PrintList(SqList L) {
for (int i = 0; i < L.length; i++) {
printf("%3d", L.data[i]);
}
printf("\n");
}
int main() {
SqList L;
L.data[0] = 1;
L.data[1] = 2;
L.data[2] = 3;
L.length = 3;
ElemType inElem;
scanf("%d", &inElem);
InsertList(L, inElem);
PrintList(L);
ElemType delElem;
scanf("%d", &delElem);
if (DeleteList(L, delElem))PrintList(L);
else printf("false");
return 0;
}
链表头插法尾插法实现
typedef int ElemType;
typedef struct LNode {
ElemType data;//数据域
struct LNode *next;
} LNode, *LinkList;
//LNode*是结构体指针,和LinkList完全等价
void ListHeadInsert(LNode *&L) {
L = (LinkList) malloc(sizeof(LNode));//申请头结点空间,头指针指向头结点
L->next = NULL;
ElemType x;
scanf("%d", &x);
LNode *s;//用来指向申请的新结点的指针
while (x != 9999) {
s = (LinkList) malloc(sizeof(LNode));
s->data = x;
s->next = L->next;//s的next指向原本的第一个数据结点
L->next = s;//头指针L的next指向新的结点,使其成为第一个数据节点
scanf("%d", &x);
}
}
//尾插法新建链表
void ListTailInsert(LNode *&L) {
L = (LinkList) malloc(sizeof(LNode));//申请头结点,头指针指向头结点
L->next = NULL;
ElemType x;
scanf("%d", &x);
LNode *r = L, *s;//r始终指向链表尾部,s用来指向申请的新结点
while (x != 9999) {
s = (LinkList) malloc(sizeof(LNode));//为新结点申请空间
s->data = x;
r->next = s;//新结点给尾结点的next指针
r = s;//r指向新的尾部
scanf("%d",&x);
}
r->next = NULL;//让尾结点的next指向NULL
}
链表查找
//按位置查找
LinkList GetElem(LinkList L, int SearchPos) {
int i = 0;
if (SearchPos < 0)return NULL;
while (L && i < SearchPos) {
L = L->next;
i++;
}
return L;
}
//按值查找
LinkList LocateElem(LinkList L, ElemType SearchVal) {
while (L) {
if (L->data == SearchVal) {
return L;
}
L = L->next;
}
return NULL;
}