C++数据结构实例代码

合集下载

数据结构经典题目及c语言代码

数据结构经典题目及c语言代码

数据结构经典题目及c语言代码一、线性表1. 顺序表顺序表是一种利用连续存储空间存储元素的线性表。

以下是一个顺序表的经典题目及C语言代码实现:```c#define MaxSize 50typedef struct {int data[MaxSize]; // 存储元素的数组int length; // 顺序表的当前长度} SeqList;// 初始化顺序表void initList(SeqList *L) {L->length = 0;}// 插入元素到指定位置void insert(SeqList *L, int pos, int elem) {if (pos < 1 || pos > L->length + 1) {printf("插入位置无效\n");return;}if (L->length == MaxSize) {printf("顺序表已满,无法插入\n"); return;}for (int i = L->length; i >= pos; i--) { L->data[i] = L->data[i - 1];}L->data[pos - 1] = elem;L->length++;}// 删除指定位置的元素void delete(SeqList *L, int pos) {if (pos < 1 || pos > L->length) {printf("删除位置无效\n");return;}for (int i = pos - 1; i < L->length - 1; i++) {L->data[i] = L->data[i + 1];}L->length--;}// 获取指定位置的元素值int getElement(SeqList *L, int pos) {if (pos < 1 || pos > L->length) {printf("位置无效\n");return -1;}return L->data[pos - 1];}```2. 链表链表是一种利用非连续存储空间存储元素的线性表。

c语言数组小案例

c语言数组小案例

c语言数组小案例C语言是一种广泛应用的编程语言,数组是C语言中常用的数据结构之一。

它可以存储多个相同类型的数据,并通过索引访问和操作这些数据。

下面列举了10个关于C语言数组的小案例,以帮助读者更好地理解和掌握数组的使用。

1. 计算数组元素的总和编写一个程序,从用户输入一组整数,并计算它们的总和。

使用数组来存储输入的整数,并通过循环遍历数组来计算总和。

2. 查找数组中的最大值和最小值编写一个程序,从用户输入一组整数,并找到其中的最大值和最小值。

使用数组来存储输入的整数,并通过循环遍历数组来找到最大值和最小值。

3. 数组的逆序排列编写一个程序,从用户输入一组整数,并将它们按逆序排列。

使用数组来存储输入的整数,并通过循环遍历数组来实现逆序排列。

4. 数组的去重编写一个程序,从用户输入一组整数,并去除其中的重复元素。

使用数组来存储输入的整数,并通过循环遍历数组来去除重复元素。

5. 数组的排序编写一个程序,从用户输入一组整数,并将它们按升序或降序排序。

使用数组来存储输入的整数,并通过循环遍历数组来实现排序。

6. 数组的拷贝编写一个程序,从用户输入一组整数,并将它们拷贝到另一个数组中。

使用两个数组分别存储输入的整数,并通过循环遍历数组来实现拷贝。

7. 数组的搜索编写一个程序,从用户输入一组整数,并在数组中搜索指定的值。

使用数组来存储输入的整数,并通过循环遍历数组来搜索指定的值。

8. 数组的合并编写一个程序,从用户输入两组整数,并将它们合并为一个数组。

使用两个数组分别存储输入的整数,并通过循环遍历数组来实现合并。

9. 数组的平均值和方差编写一个程序,从用户输入一组整数,并计算它们的平均值和方差。

使用数组来存储输入的整数,并通过循环遍历数组来计算平均值和方差。

10. 数组的矩阵操作编写一个程序,从用户输入一个矩阵,并实现矩阵的转置、矩阵的相加和矩阵的乘法等操作。

使用二维数组来存储输入的矩阵,并通过循环遍历数组来实现矩阵操作。

数据结构试验完整代码

数据结构试验完整代码

数据结构实验完整代码目录一、顺序存储的线性表 (2)二、单链存储的线性表 (4)三、栈 (7)四、队列 (8)五、二叉树的建立和遍历 (10)六、霍夫曼树 (11)七、图的建立和遍历 (17)图的邻接矩阵表示 (17)图的邻接表表示 (20)八、图的最小生成树 (23)九、图的最短路径 (28)十、顺序查找表 (31)十一、二叉排序树的查找 (34)十二、哈希表 (36)十三、插入排序 (41)十四、交换排序-冒泡排序 (44)十五、交换排序-快速排序 (45)十六、简单选择排序 (45)十七、堆排序 (46)一、顺序存储的线性表typedef struct{char name[10];char no[10];double grade;}Student;typedef struct{Student *elem;int length;int listsize;}SqList;void Display(SqList *L){int i;for (i=0;i<L->length ;i++){cout<<i+1<<":姓名"<<L->elem[i].name<<",学号:"<<L->elem[i].no<<",成绩:"<<L->elem[i].grade <<endl;}cout<<"请选择菜单项:";}SqList *CreateList(){SqList *L;L=(SqList*)malloc(sizeof(SqList));if(!L) cout<<"建立线性表失败!";else cout<<"建立线性表成功!";return(L);}int InitList(SqList *L){int i;char name[10],no[10];double grade;L->elem=(Student *)malloc(ListInitSize * sizeof(Student));if (!(L->elem)) cout<<"初始化表失败!";L->length = 0;L->listsize = ListInitSize;cout<<"请输入要录入信息的学生个数:"<<endl;cin>>i;if (i>(L->listsize)){L->elem =(Student *)realloc(L->elem ,i*sizeof(Student));}for (int j=0;j<i;j++){cout<<"请输入第"<<j+1<<"个学生的信息:"<<endl;cin>>name>>no>>grade;strcpy((L->elem+L->length)->name,name);strcpy((L->elem+L->length)->no,no);(L->elem+L->length)->grade =grade;L->length ++;}cout<<"信息录入完成!";return 0;}int Insert(SqList *l){Student e;int i,j;Student *newbase;cout<<"请输入要插入的位置:";cin>>j;j--;cout<<"请输入学生信息:";cin>>>>e.no>>e.grade;if(l->length==l->listsize){newbase=(Student*)realloc(l->elem,(l->listsize+ListIncreasement)*sizeof(Studen t));if(!newbase){cout<<"出错!";return 0;}l->elem=newbase;l->listsize+=ListIncreasement;}for(i=l->length;i>=j;i--){l->elem[i+1] = l->elem[i];}l->elem[j]=e;l->length++;cout<<"插入成功!";return 0;}int Delect(SqList *L){int i,j;cout<<"输入删除信息的位置:";cin>>j;j--;cout<<"删除的信息为:姓名:"<<L->elem[j].name<<",学号:"<<L->elem[j].no<<"成绩:"<<L->elem[j].grade<<endl;for(i=j+1;i<=L->length;i++){L->elem[i-1]=L->elem[i];}L->length--;cout<<"请按回车继续"<<endl;getchar();getchar();cout<<"删除成功!";return 0;}二、单链存储的线性表typedef struct Student{char name[10];char no[10];double grade;}Student;typedef struct LNode{Student data;LNode *next;}LNode,*LinkList;void CreateList(LinkList &l){l=(LinkList)malloc(sizeof(LNode));if (!l) cout<<"建立失败。

C语言入门基础代码(20条案例)

C语言入门基础代码(20条案例)

C语言入门基础代码(20条案例)下面是20条基础案例:1. 输出Hello, World!#include <stdio.h> // 使用标准输入输出库int main() {printf("Hello, World!\n"); // 输出字符串return 0; // 返回程序执行成功}2. 判断一个数是否为偶数#include <stdio.h> // 使用标准输入输出库int main() {int num; // 定义变量printf("请输入一个整数:");scanf("%d", &num); // 从控制台输入一个整数if(num % 2 == 0) { // 如果余数为0说明是偶数printf("%d 是偶数\n", num);} else {printf("%d 是奇数\n", num);}return 0;}3. 计算两个数的和#include <stdio.h> // 使用标准输入输出库int main() {int a, b; // 定义变量int sum; // 定义变量printf("请输入两个整数:");scanf("%d%d", &a, &b); // 从控制台输入两个整数sum = a + b; // 求和printf("%d + %d = %d\n", a, b, sum); // 输出结果return 0;}4. 求一个数的平方#include <stdio.h> // 使用标准输入输出库int main() {int num; // 定义变量int square; // 定义变量printf("请输入一个整数:");scanf("%d", &num); // 从控制台输入一个整数square = num * num; // 求平方printf("%d 的平方是%d\n", num, square); // 输出结果return 0;}5. 判断一个字符是否为数字#include <stdio.h> // 使用标准输入输出库#include <ctype.h> // 使用字符函数库int main() {char ch; // 定义变量printf("请输入一个字符:");scanf("%c", &ch); // 从控制台输入一个字符if(isdigit(ch)) { // 判断是否为数字printf("%c 是数字\n", ch);} else {printf("%c 不是数字\n", ch);}return 0;}6. 计算数组元素的平均值#include <stdio.h> // 使用标准输入输出库int main() {int arr[] = {1, 2, 3, 4, 5}; // 定义数组int len = sizeof(arr) / sizeof(int); // 数组长度int sum = 0; // 定义变量int avg; // 定义变量for(int i = 0; i < len; i++) { // 遍历数组sum += arr[i]; // 累加求和}avg = sum / len; // 求平均值printf("数组的平均值是%d\n", avg); // 输出结果return 0;}7. 按照下标访问数组元素#include <stdio.h> // 使用标准输入输出库int main() {int arr[] = {1, 2, 3, 4, 5}; // 定义数组int len = sizeof(arr) / sizeof(int); // 数组长度for(int i = 0; i < len; i++) { // 遍历数组printf("arr[%d] = %d\n", i, arr[i]); // 输出每个元素}return 0;}8. 使用指针访问数组元素#include <stdio.h> // 使用标准输入输出库int main() {int arr[] = {1, 2, 3, 4, 5}; // 定义数组int len = sizeof(arr) / sizeof(int); // 数组长度int *p = arr; // 把数组首地址赋给指针变量for(int i = 0; i < len; i++) { // 遍历数组printf("arr[%d] = %d\n", i, *(p + i)); // 输出每个元素}return 0;}9. 求Fibonacci 数列的第n 项#include <stdio.h> // 使用标准输入输出库int main() {int n; // 定义变量int a = 0, b = 1, c; // 定义变量printf("请输入一个正整数:");scanf("%d", &n); // 从控制台输入一个整数for(int i = 1; i <= n; i++) { // 求Fibonacci 数列的第n 项c = a + b;a = b;b = c;}printf("Fibonacci 数列的第%d 项是%d\n", n, a); // 输出结果return 0;}10. 使用递归计算阶乘#include <stdio.h> // 使用标准输入输出库int factorial(int n) { // 定义递归函数if(n == 0 || n == 1) {return 1;} else {return n * factorial(n - 1);}}int main() {int n; // 定义变量printf("请输入一个非负整数:");scanf("%d", &n); // 从控制台输入一个整数int result = factorial(n); // 调用递归函数计算阶乘printf("%d 的阶乘是%d\n", n, result); // 输出结果return 0;}11. 判断一个数是否是质数#include <stdio.h>#include <stdbool.h>bool isPrime(int num) {if(num <= 1) {return false; // 小于等于1的数都不是质数}for(int i = 2; i * i <= num; i++) { // 只要从2到根号num遍历就可以了if(num % i == 0) {return false; // 如果存在因子,则不是质数}}return true;}int main() {int num;printf("请输入一个整数:");scanf("%d", &num);bool result = isPrime(num); // 调用isPrime函数if(result) {printf("%d 是质数\n", num);} else {printf("%d 不是质数\n", num);}return 0;}12. 计算圆的面积和周长#include <stdio.h>const double PI = 3.1415926;int main() {double r, area, perimeter;printf("请输入圆的半径:");scanf("%lf", &r);area = PI * r * r; // 计算面积perimeter = 2 * PI * r; // 计算周长printf("圆的面积是%.2f,周长是%.2f\n", area, perimeter);return 0;}13. 计算斐波那契数列的前n 项#include <stdio.h>int main() {int n;printf("请输入要输出的斐波那契数列项数:");scanf("%d", &n);int a = 0, b = 1, c; // 定义三个变量for(int i = 1; i <= n; i++) { // 输出前n项斐波那契数列printf("%d ", a);c = a + b;a = b;b = c;}printf("\n"); // 换行return 0;}14. 嵌套循环输出九九乘法表#include <stdio.h>int main() {for(int i = 1; i <= 9; i++) { // 控制行数for(int j = 1; j <= i; j++) { // 控制列数printf("%d*%d=%-2d ", j, i, i * j); // 左对齐输出}printf("\n"); // 换行}return 0;}15. 获得数组的最大值和最小值#include <stdio.h>int main() {int arr[] = {3, 5, 8, 1, 4, 9, 6, 2, 7};int len = sizeof(arr) / sizeof(int);int max = arr[0], min = arr[0]; // 假设第一个元素既是最大值也是最小值for(int i = 1; i < len; i++) {if(arr[i] > max) { // 更新最大值max = arr[i];}if(arr[i] < min) { // 更新最小值min = arr[i];}}printf("数组的最大值是%d,最小值是%d\n", max, min);return 0;}16. 判断一个数是否为回文数```c#include <stdio.h>#include <stdbool.h>bool isPalindrome(int num) {if(num < 0) { // 负数不是回文数return false;}int temp = num, reversed = 0; // 定义需要用到的变量while(temp != 0) { // 反转整数reversed = reversed * 10 + temp % 10;temp /= 10;}return (num == reversed); // 如果反转后等于原来的数,则为回文数}int main() {int num;printf("请输入一个整数:");scanf("%d", &num);bool result = isPalindrome(num);if(result) {printf("%d 是回文数\n", num);} else {printf("%d 不是回文数\n", num);}return 0;}17. 将字符串反转输出#include <stdio.h>#include <string.h>int main() {char str[100];printf("请输入一个字符串:");scanf("%s", str);int len = strlen(str);for(int i = len - 1; i >= 0; i--) { // 倒序输出printf("%c", str[i]);}printf("\n"); // 换行return 0;}18. 将一个二维数组按列排序#include <stdio.h>void sortCols(int arr[][3], int rows) {for(int j = 0; j < 3; j++) { // 按列排序for(int i = 0; i < rows - 1; i++) {for(int k = i + 1; k < rows; k++) {if(arr[i][j] > arr[k][j]) { // 比较大小并交换int temp = arr[i][j];arr[i][j] = arr[k][j];arr[k][j] = temp;}}}}}int main() {int arr[][3] = {{2, 5, 9}, {7, 6, 1}, {4, 3, 8}};int rows = sizeof(arr) / sizeof(arr[0]); // 计算数组的行数sortCols(arr, rows); // 调用函数排序for(int i = 0; i < rows; i++) { // 输出排序后的数组for(int j = 0; j < 3; j++) {printf("%d ", arr[i][j]);}printf("\n"); // 换行}return 0;}19. 判断一个字符串是否为回文串#include <stdio.h>#include <string.h>#include <stdbool.h>bool isPalindrome(char str[]) {int len = strlen(str);for(int i = 0; i < len / 2; i++) { // 判断左右字符是否一样if(str[i] != str[len - i - 1]) {return false;}}return true;}int main() {char str[100];printf("请输入一个字符串:");scanf("%s", str);bool result = isPalindrome(str); // 调用函数判断是否为回文串if(result) {printf("%s 是回文串\n", str);} else {printf("%s 不是回文串\n", str);}return 0;}20. 将一个整数转换成二进制数并输出#include <stdio.h>void decToBin(int num) {if(num > 1) { // 递归调用decToBin(num / 2);}printf("%d", num % 2); // 每次输出余数}int main() {int num;printf("请输入一个十进制数:");scanf("%d", &num);printf("%d 的二进制数为", num);decToBin(num); // 调用函数输出二进制数printf("\n"); // 换行return 0;}。

c语言案例100例

c语言案例100例

c语言案例100例C语言是一种广泛应用于系统软件开发和嵌入式系统编程的高级编程语言。

它以其简洁、高效和可移植性而闻名,因此被广泛用于各种应用领域。

本文将为您介绍100个C语言案例,旨在帮助您更好地理解和运用C语言。

案例一:Hello World```c#include <stdio.h>int main() {printf("Hello, World!");return 0;}```这是C语言中最简单的程序,它会输出"Hello, World!"。

案例二:求和```c#include <stdio.h>int main() {int num1, num2, sum;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);sum = num1 + num2;printf("两个整数的和为:%d", sum);return 0;}```这个程序会要求用户输入两个整数,然后计算并输出它们的和。

案例三:判断奇偶数```c#include <stdio.h>int main() {int num;printf("请输入一个整数:");scanf("%d", &num);if (num % 2 == 0) {printf("%d是偶数", num);} else {printf("%d是奇数", num);}return 0;}```这个程序会要求用户输入一个整数,然后判断它是奇数还是偶数,并输出相应的结果。

......(继续介绍更多的案例)通过以上100个C语言案例,您可以系统地学习和掌握C语言的各个方面。

每个案例都涉及不同的主题,从简单的Hello World程序到复杂的数据结构和算法,涵盖了C语言中的各种常见用法和技巧。

二叉树c语言实现完整代码

二叉树c语言实现完整代码

二叉树c语言实现完整代码二叉树是一种非常常见的数据结构,它由节点和边组成,每个节点最多有两个子节点,分别称为左子节点和右子节点。

在计算机科学中,二叉树被广泛应用于搜索、排序、编译器等领域。

本文将介绍如何使用C语言实现二叉树的完整代码。

我们需要定义二叉树的节点结构体。

每个节点包含三个成员变量:数据、左子节点和右子节点。

代码如下:```struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;};```接下来,我们需要实现二叉树的基本操作,包括创建节点、插入节点、删除节点、查找节点等。

这些操作可以通过递归实现。

代码如下:```// 创建节点struct TreeNode* createNode(int val) {struct TreeNode* node = (struct TreeNode*)malloc(sizeof(struct TreeNode));node->val = val;node->left = NULL;node->right = NULL;return node;}// 插入节点struct TreeNode* insertNode(struct TreeNode* root, int val) {if (root == NULL) {return createNode(val);}if (val < root->val) {root->left = insertNode(root->left, val);} else {root->right = insertNode(root->right, val);}return root;}// 删除节点struct TreeNode* deleteNode(struct TreeNode* root, int val) {if (root == NULL) {return NULL;}if (val < root->val) {root->left = deleteNode(root->left, val);} else if (val > root->val) {root->right = deleteNode(root->right, val);} else {if (root->left == NULL) {struct TreeNode* temp = root->right;free(root);return temp;} else if (root->right == NULL) {struct TreeNode* temp = root->left;free(root);return temp;}struct TreeNode* temp = findMin(root->right); root->val = temp->val;root->right = deleteNode(root->right, temp->val); }return root;}// 查找节点struct TreeNode* searchNode(struct TreeNode* root, int val) {if (root == NULL || root->val == val) {return root;}if (val < root->val) {return searchNode(root->left, val);} else {return searchNode(root->right, val);}}// 查找最小节点struct TreeNode* findMin(struct TreeNode* root) {while (root->left != NULL) {root = root->left;}return root;}```我们需要实现二叉树的遍历操作,包括前序遍历、中序遍历和后序遍历。

C语言代码大全

C语言代码大全

C语言代码大全C语言是一种高级程序设计语言,广泛应用于计算机科学和软件开发领域。

它以其简洁、高效的特点而备受青睐。

本文将为您介绍一些常用的C语言代码,包括输入输出、流程控制、函数调用、数据结构等方面的代码示例。

一、输入输出1. 标准输入输出```c#include <stdio.h>int main() {int num;printf("请输入一个整数:");scanf("%d", &num);printf("您输入的数字是:%d\n", num);return 0;}```2. 文件读写```cint main() {FILE *file;char str[100];// 写入文件file = fopen("data.txt", "w");fprintf(file, "Hello, World!");fclose(file);// 读取文件file = fopen("data.txt", "r");fscanf(file, "%s", str);printf("从文件中读取的内容是:%s\n", str); fclose(file);return 0;}```二、流程控制1. 条件语句```cint main() {int num = 10;if (num > 0) {printf("该数字是正数。

\n"); } else if (num < 0) {printf("该数字是负数。

\n"); } else {printf("该数字是零。

\n"); }return 0;}```2. 循环语句```c#include <stdio.h>int main() {int num = 5;// while循环while (num > 0) {printf("当前数字:%d\n", num); num--;}// for循环for (int i = 0; i < 5; i++) {printf("当前数字:%d\n", i);}// do-while循环do {printf("当前数字:%d\n", num); num++;} while (num < 5);return 0;}```三、函数调用```c#include <stdio.h>int add(int a, int b) {return a + b;}int main() {int num1 = 5;int num2 = 3;int result = add(num1, num2);printf("两个数的和为:%d\n", result); return 0;}```四、数据结构1. 数组```c#include <stdio.h>int main() {int arr[5] = {1, 2, 3, 4, 5};for (int i = 0; i < 5; i++) {printf("数组元素:%d\n", arr[i]); }return 0;}```2. 结构体```c#include <stdio.h>struct Student {char name[20];int age;};int main() {struct Student stu1;strcpy(, "Tom");stu1.age = 18;printf("学生姓名:%s\n", ); printf("学生年龄:%d\n", stu1.age); return 0;}```以上只是C语言代码中的一小部分示例,C语言是一门非常庞大的编程语言,拥有众多的功能和特性。

常用数据结构代码示例

常用数据结构代码示例

常⽤数据结构代码⽰例⼀、线性表 1、线性表顺序存储1 #include "stdio.h"23 #include "stdlib.h"4 #include "io.h"5 #include "math.h"6 #include "time.h"78#define OK 19#define ERROR 010#define TRUE 111#define FALSE 01213#define MAXSIZE 20 /* 存储空间初始分配量 */1415 typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */16 typedef int ElemType; /* ElemType类型根据实际情况⽽定,这⾥假设为int */171819 Status visit(ElemType c)20 {21 printf("%d ",c);22return OK;23 }2425 typedef struct26 {27 ElemType data[MAXSIZE]; /* 数组,存储数据元素 */28int length; /* 线性表当前长度 */29 }SqList;3031/* 初始化顺序线性表 */32 Status InitList(SqList *L)33 {34 L->length=0;35return OK;36 }3738/* 初始条件:顺序线性表L已存在。

操作结果:若L为空表,则返回TRUE,否则返回FALSE */39 Status ListEmpty(SqList L)40 {41if(L.length==0)42return TRUE;43else44return FALSE;45 }4647/* 初始条件:顺序线性表L已存在。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1 线性表的顺序表示#include”iostream”#include"malloc。

h”using namespace std;typedef struct{int *elem;int length;int listsize;}SqList;int Init_Sq(SqList &L){L。

elem=(int *)malloc(100*sizeof(int));if(!L。

elem)exit(—2);L。

length=0;L.listsize=100;return 1;}int ListInsert(SqList &L,int i,int e){if(i<1||i〉L。

length+1)return 0;if(L。

length〉=L。

listsize){int *newbase=(int *)realloc(L.elem,(L.listsize+10)*sizeof(int));if(!newbase)exit(-2);L。

elem=newbase;L.listsize+=10;}int*q=&(L.elem[i-1]);int *p=&(L.elem[L.length—1]);for(p;p〉=q;—-p){*(p+1)=*p;}*q=e;++L.length;return 1;}int ListDelete(SqList &L,int i,int&e){if(i<1||i>L。

length)return 0;int *p=&(L.elem[i—1]);e=*p;int *q=L。

elem+L。

length-1;for(++p;p〈=q;++p){*(p—1)=*p;}—-L.length;return e;}int main(){int a[6]={1,2,3,4,5};int*q=&a[1];int*p=&a[4];for(p;p〉=q;—-p){*(p+1)=*p;}*q=3;for(int i=0;i〈6;i++){cout〈<a[i]<<" ”;}cout<〈endl;SqList lx;Init_Sq(lx);for(int j=1;j<10;j++){ListInsert(lx,j,j);}ListInsert(lx,3,55);int e_return;ListDelete(lx,4,e_return);for(int m=0;m<10;m++){cout<〈*(lx。

elem+m)<〈" ";}cout〈<endl;cout<〈e_return;system("pause”);return 0;}1 3234 51 2 55 4 5 6 7 8 9 93请按任意键继续. . .2 线性表的链性表示#include”iostream"#include"malloc.h"using namespace std;typedef struct LNode{int data;struct LNode *next;}LNode,*LinkList;int InitList(LinkList &L){L=(LinkList)malloc(sizeof(LNode));L—〉next=NULL;return 1;}int ListInsert(LinkList &L,int i,int e){LinkList p=L;int j=0;while(p&&j〈i—1){p=p—〉next;++j;}if(!p||j〉i-1)return 0;LinkList s=(LinkList)malloc(sizeof(LNode));s->data=e;s—>next=p—>next;p—>next=s;return 1;}int ListDelete(LinkList &L,int i){LinkList p=L;int j=0;while(p-〉next&&j〈i-1){p=p->next;++j;}if(!(p-〉next)||j〉i—1)return 0;LinkList q=p->next;p—>next=q—>next;free(q);return 1;}int GetElem(LinkList L,int i){LinkList p=L-〉next;int j=1;while(p&&j<i){p=p—>next;++j;}if(!p||j〈i)return 0;int e=p—〉data;return e;}int main(){LinkList lx;InitList(lx);for(int i=1;i<6;i++){ListInsert(lx,i,i);}ListDelete(lx,2);for(int j=1;j〈5;j++){cout〈〈GetElem(lx,j)<〈" ”;}cout<<endl;LinkList lx1,lx2;InitList(lx1);InitList(lx2);for(int m=1;m〈6;m++){ListInsert(lx1,m,m);}for(int n=1;n〈6;n++){ListInsert(lx2,n,2*n);}for(int j=1;j〈6;j++){cout〈〈GetElem(lx1,j)<〈" ”;}system(”pause”);return 0;}1 3 4 51 2 3 4 5 请按任意键继续. . 。

3 双向链表#include"iostream"#include”malloc.h”using namespace std;typedef struct dlist{int data;struct dlist *prior;struct dlist *next;}DList,*DLinkList;void InitList(DLinkList &L){L=(DLinkList)malloc(sizeof(DList));L-〉next=L;L—〉prior=L;}int ListInsert(DLinkList &L,int i,int e) {DLinkList p,s;p=L—>next;int j=1;while(p&&j<i){p=p-〉next;++j;}if(!p||j>i)return 0;s=(DLinkList)malloc(sizeof(DList));s->data=e;s->prior=p—>prior;p—>prior—>next=s;s—>next=p;p—〉prior=s;return 1;}int ListDelete(DLinkList &L,int i,int&e) {DLinkList p;p=L—>next;int j=1;while(p&&j〈i){p=p—〉next;++j;}if(!p||j>i)return 0;e=p—>data;p—>prior->next=p-〉next;p-〉next-〉prior=p->prior;free(p);return 1;}int GetElem(DLinkList &L,int i){DLinkList p,s;p=L-〉next;int j=1;while(p&&j〈i){p=p—>next;++j;}if(!p||j〉i)return 0;int e=p-〉data;return e;}int main(){DLinkList lx;InitList(lx);for(int i=1;i<6;i++){ListInsert(lx,i,2*i-1);}for(int j=1;j〈6;j++){cout<〈GetElem(lx,j)〈〈" ";}cout<〈endl;int e;ListDelete(lx,2,e);cout〈<e〈〈endl;for(int j=1;j<5;j++){cout<<GetElem(lx,j)〈<" ";}system("pause");return 0;1 3 5 7 931 5 7 9 请按任意键继续. 。

.4 顺序栈#include"iostream”#include”malloc。

h"using namespace std;#define STACK_INIT_SIZE 100//存ä?储ä¡é空?间?初?始º?分¤?配?量¢?#define STACKINCREMENT 10//存ä?储ä¡é空?间?分¤?配?增?量¢?typedef struct{int *base;int*top;int stacksize;}Stack;int InitStack(Stack &S){S.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));if(!S.base)exit(-2);S。

top=S。

base;S.stacksize=STACK_INIT_SIZE;return 1;}int GetTop(Stack &S,int &e){if(S.top==S.base)return 0;e=*(S.top-1);return 1;}int Push(Stack &S,int e){if(S。

top—S.base>=S。

stacksize){S。

base=(int*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));if(!S。

base)exit(-2);S。

top=S。

base+S。

stacksize;S。

stacksize+=STACKINCREMENT;}*S。

top++=e;}int Pop(Stack &S,int&e)if(S.top==S。

base)return 0;e=*-—S。

相关文档
最新文档