数据结构c语言版严蔚敏答案
时间: 2024-12-21 16:05:15 浏览: 4
严蔚敏《数据结构(c语言版)习题集》全答案.pdf
5星 · 资源好评率100%
《数据结构(C语言版)》是由严蔚敏教授编写的一本经典教材,广泛应用于计算机科学和软件工程专业的教学中。该教材详细介绍了各种数据结构的概念、原理和实现方法,并结合C语言进行具体讲解。书中的习题和答案对于学生理解和巩固所学知识非常重要。
以下是一些常见的数据结构和相关题目的答案示例:
1. **线性表**:
- **顺序表**:使用数组实现的线性表,支持随机访问。
- **链表**:使用指针实现的线性表,支持动态内存分配。
**示例题目**:实现一个单链表并编写插入和删除操作。
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
void insert(Node** head, int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = *head;
*head = newNode;
}
void deleteNode(Node** head, int key) {
Node* temp = *head;
Node* prev = NULL;
if (temp != NULL && temp->data == key) {
*head = temp->next;
free(temp);
return;
}
while (temp != NULL && temp->data != key) {
prev = temp;
temp = temp->next;
}
if (temp == NULL) return;
prev->next = temp->next;
free(temp);
}
void printList(Node* node) {
while (node != NULL) {
printf("%d -> ", node->data);
node = node->next;
}
printf("NULL\n");
}
int main() {
Node* head = NULL;
insert(&head, 3);
insert(&head, 2);
insert(&head, 1);
printList(head);
deleteNode(&head, 2);
printList(head);
return 0;
}
```
2. **栈**:
- **顺序栈**:使用数组实现的栈。
- **链栈**:使用链表实现的栈。
**示例题目**:实现一个链栈并编写入栈和出栈操作。
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct StackNode {
int data;
struct StackNode* next;
} StackNode;
typedef struct Stack {
StackNode* top;
} Stack;
void push(Stack* stack, int data) {
StackNode* newNode = (StackNode*)malloc(sizeof(StackNode));
newNode->data = data;
newNode->next = stack->top;
stack->top = newNode;
}
int pop(Stack* stack) {
if (stack->top == NULL) return -1;
StackNode* temp = stack->top;
int popped = temp->data;
stack->top = temp->next;
free(temp);
return popped;
}
void printStack(Stack* stack) {
StackNode* temp = stack->top;
while (temp != NULL) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
}
int main() {
Stack stack;
stack.top = NULL;
push(&stack, 3);
push(&stack, 2);
push(&stack, 1);
printStack(&stack);
printf("Popped: %d\n", pop(&stack));
printStack(&stack);
return 0;
}
```
3. **队列**:
- **顺序队列**:使用数组实现的队列。
- **链队列**:使用链表实现的队列。
**示例题目**:实现一个链队列并编写入队和出队操作。
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct QueueNode {
int data;
struct QueueNode* next;
} QueueNode;
typedef struct Queue {
QueueNode* front;
QueueNode* rear;
} Queue;
void enqueue(Queue* queue, int data) {
QueueNode* newNode = (QueueNode*)malloc(sizeof(QueueNode));
newNode->data = data;
newNode->next = NULL;
if (queue->rear == NULL) {
queue->front = queue->rear = newNode;
return;
}
queue->rear->next = newNode;
queue->rear = newNode;
}
int dequeue(Queue* queue) {
if (queue->front == NULL) return -1;
QueueNode* temp = queue->front;
int dequeued = temp->data;
queue->front = temp->next;
if (queue->front == NULL) queue->rear = NULL;
free(temp);
return dequeued;
}
void printQueue(Queue* queue) {
QueueNode* temp = queue->front;
while (temp != NULL) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
}
int main() {
Queue queue;
queue.front = queue.rear = NULL;
enqueue(&queue, 3);
enqueue(&queue, 2);
enqueue(&queue, 1);
printQueue(&queue);
printf("Dequeued: %d\n", dequeue(&queue));
printQueue(&queue);
return 0;
}
```
阅读全文