(一)线性表 、顺序存储结构


(二)顺序表概念、顺序表算法设计


(三)单链表概念、单链表算法设计



(四)本周小结



(五)相关代码
Ⅰ顺序表相关
// DataStruct.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
#include <stdio.h>
typedef struct
{
int data[1000];
int length;
}Sqlist;
void MoveElem(Sqlist* L, int frist, int last)
{
if (frist < last)
{
for (int i = frist; i < last + 1; i++)
{
L->data[i - 1] = L->data[i];
}
}
}
void move1(Sqlist*& L)/* 荷兰国旗问题 */
{
//printf("%d", L->length);
int i = 0; int j = L->length - 1; int tmp;
int pivot = L->data[0];
//printf("%d,%d", i, j);
while (i < j)
{
while (i < j && L->data[i] <= pivot)
i++;
while (i<j && L->data[j]>pivot)
j--;
if (i < j)
{
tmp = L->data[i];
L->data[i] = L->data[j];
L->data[j] = tmp;
}
}
if (L->data[j] < L->data[0])
{
tmp = L->data[j];
L->data[j] = L->data[0];
L->data[0] = tmp;
}
else
{
if (L->data[j] == L->data[0])
{
MoveElem(L, 1, i - 1);
L->data[i - 1] = L->data[0];
}
else
{
tmp = L->data[j];
L->data[j] = L->data[0];
MoveElem(L, 1, L->length - 1);
L->data[L->length - 1] = tmp;
}
}
}
int main()
{
Sqlist* Lp;
Sqlist L = { {2,3,4,1,5,6,2,8,5,9},10 };
Lp = &L;
move1(Lp);
for (int i = 0; i < Lp->length; i++)
{
printf("%d", Lp->data[i]);
}
}
// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单
// 入门使用技巧:
// 1. 使用解决方案资源管理器窗口添加/管理文件
// 2. 使用团队资源管理器窗口连接到源代码管理
// 3. 使用输出窗口查看生成输出和其他消息
// 4. 使用错误列表窗口查看错误
// 5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
// 6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件
Ⅱ单链表相关
求数组长度#define GET_ARRAY_LEN(arr,len){len = (sizeof(arr)/sizeof(arr[0]));}
// ChainList.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#define GET_ARRAY_LEN(arr,len){len = (sizeof(arr)/sizeof(arr[0]));}
typedef struct LNode
{
int data;
LNode* next;
}LinkList;
int GetArrayLen(int* arr[])
{
return sizeof(arr) / sizeof(arr[0]);
}
void CreateList(int data[], LinkList*& L,int len)
{
LinkList* s;
for(int i = 0; i< len; i++)
{
s =(LinkList *) malloc(sizeof(LinkList));
s->data = data[i];
s->next = L->next;
L->next = s;
}
}
void DispList(LinkList* L)
{
while (L!=NULL)
{
printf("%d\n", L->data);
L = L->next;
}
}
void sort(LinkList * L)
{
LinkList* p, * pre, * q;
p = L->next->next;
L->next->next = NULL;
while (p != NULL)
{
q = p->next;
pre = L;
while (pre->next!= NULL && pre->next->data < p->data)
{
pre = pre->next;
}
p->next = pre->next;
pre->next = p;
p = q;
}
}
int main()
{
int len;
LinkList* L = (LinkList*)malloc(sizeof(LinkList));
L->data = 0;
L->next = NULL;
int a[15] = { 1,2,5,4,8,9,6,23,13,4,3213,2323,54,234,1312 };
//printf("%d\n\n", sizeof(a)/ sizeof(a[0]));
GET_ARRAY_LEN(a, len);
CreateList(a, L,len);
DispList(L);
sort(L);
printf("--------------");
DispList(L);
std::cout << "Hello World!\n";
}
// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单
// 入门使用技巧:
// 1. 使用解决方案资源管理器窗口添加/管理文件
// 2. 使用团队资源管理器窗口连接到源代码管理
// 3. 使用输出窗口查看生成输出和其他消息
// 4. 使用错误列表窗口查看错误
// 5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
// 6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件
本文介绍了线性表的顺序存储结构,包括顺序表的概念和相关算法设计。接着探讨了单链表的基本概念及其算法实现。文章提供了C语言实现的顺序表移动元素和荷兰国旗问题的排序示例,以及单链表的创建、显示和排序功能。
1万+

被折叠的 条评论
为什么被折叠?



