动态分配实现顺序表

定义一个动态分配的顺序表,初始化顺序表,增加顺序表的长度

#include<stdio.h>
#include<stdlib.h>
#define InitSize 10//默认的最大长度 
typedef struct{
	int *data;//指示动态分配数组的指针 
	int MaxSize;//顺序表的最大容量 
	int length;//顺序表的当前长度 
}SeqList; 
//初始化动态分配的顺序表 
void InitList(SeqList &L){
	//用malloc 函数申请了一片连续的存储空间 
	L.data=(int *)malloc(InitSize*sizeof(int));
	L.length=0;
	L.MaxSize=InitSize;
} 
//增加动态数组的长度 
void IncreaseSize(SeqList &L,int len){
	int *p=L.data;
	L.data=(int *)malloc((L.MaxSize+len)*sizeof(int));
	for(int i=0;i<L.length;i++){
		L.data[i]=p[i];//将数据复制到新区域 
	} 
	L.MaxSize=L.MaxSize+len;//顺序表的最大长度增加了len 
	free(p);//释放原来的内存空间 
} 
int main(){
	SeqList L;
	InitList(L);
	
	
	IncreaseSize(L,5);
	return 0;
} 


C语言中,动态内存分配通常使用`malloc()`和`free()`函数来创建和释放顺序表(也称为数组)。下面是一个简单的示例,演示了如何动态地创建、插入元素以及释放顺序表: ```c #include <stdio.h> #include <stdlib.h> // 定义顺序表结构体 typedef struct Node { int data; // 存储数据 struct Node* next; // 指向下一个节点的指针 } Node; // 动态创建一个新的顺序表节点 Node* create_node(int value) { Node* newNode = (Node*)malloc(sizeof(Node)); // 分配空间 if (newNode != NULL) { newNode->data = value; newNode->next = NULL; } return newNode; } // 在顺序表末尾添加新节点 void insert_at_end(Node** head, int value) { Node* newNode = create_node(value); if (*head == NULL) { // 列表为空,直接将新节点设为首节点 *head = newNode; } else { Node* current = *head; while (current->next != NULL) { current = current->next; } current->next = newNode; } } // 删除并释放列表 void delete_list(Node** head) { Node* temp; while (*head != NULL) { temp = *head; *head = (*head)->next; free(temp); // 释放当前节点的空间 } } // 打印顺序表 void print_list(Node* head) { Node* current = head; while (current != NULL) { printf("%d ", current->data); current = current->next; } printf("\n"); } int main() { Node* head = NULL; int n, value; printf("Enter number of elements: "); scanf("%d", &n); for (int i = 0; i < n; i++) { printf("Enter element %d: ", i + 1); scanf("%d", &value); insert_at_end(&head, value); // 插入元素到末尾 } printf("Sequence List: "); print_list(head); delete_list(&head); // 删除并释放所有节点 return 0; } ``` 在这个例子中,我们首先定义了一个顺序表的节点结构体`Node`,然后创建用于存储数据的新节点并将其加入到链表的末尾。删除节点时遍历链表并将每个节点逐个释放。当不再需要顺序表时,通过调用`delete_list`函数清除所有的节点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值