用C语言求链式线性表的倒数第K项 分
时间: 2024-06-12 16:10:26 浏览: 16
链式线性表的倒数第K项可以用多种方法求解。其中一种方法是使用队列,让队列里面的元素永远保持K个,如果等于K并且输入的数是正数我们就弹出首位元素,这样队尾就永远是最后一个元素,队首就永远是目前已知的最后一个元素的前K个元素,最后只要判断队列的size是否为K即可弄出来答案。另一种方法是使用头插法,将输入的元素逆序插入链表中,然后直接访问第K个元素即可。具体实现可以参考提供的代码。
相关问题
c语言实现链式线性表删除指定元素
链式线性表删除指定元素的C语言实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data;
struct node *next;
} Node, *LinkedList;
void deleteElement(LinkedList *list, int element) {
Node *p, *q;
p = *list;
q = NULL;
while (p != NULL && p->data != element) {
q = p;
p = p->next;
}
if (p == NULL) {
printf("Element not found.\n");
return;
}
if (q == NULL) {
*list = p->next;
} else {
q->next = p->next;
}
free(p);
}
int main() {
LinkedList list = NULL;
Node *p, *q;
int i = 0;
// create list
for (i = 0; i < 5; i++) {
p = (Node*) malloc(sizeof(Node));
p->data = i + 1;
p->next = NULL;
if (list == NULL) {
list = p;
} else {
q->next = p;
}
q = p;
}
// print list
printf("List: ");
p = list;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
// delete element
deleteElement(&list, 3);
// print list after deletion
printf("List after deletion: ");
p = list;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
// free memory
while (list != NULL) {
p = list;
list = list->next;
free(p);
}
return 0;
}
```
用c语言链式线性表的建立、插入及删除
链式线性表是一种基于指针的数据结构,可以动态地增加或删除元素。下面是用 C 语言实现链式线性表的建立、插入和删除的代码示例:
建立链式线性表:
```
typedef struct Node {
int data;
struct Node *next;
} Node;
Node *createList(int n) {
Node *head = NULL, *tail = NULL;
for (int i = 0; i < n; i++) {
Node *node = (Node *)malloc(sizeof(Node));
node->data = i;
node->next = NULL;
if (head == NULL) {
head = node;
tail = node;
} else {
tail->next = node;
tail = node;
}
}
return head;
}
```
插入元素:
```
void insert(Node *head, int index, int data) {
Node *node = (Node *)malloc(sizeof(Node));
node->data = data;
node->next = NULL;
Node *p = head;
for (int i = 0; i < index - 1; i++) {
p = p->next;
}
node->next = p->next;
p->next = node;
}
```
删除元素:
```
void delete(Node *head, int index) {
Node *p = head;
for (int i = 0; i < index - 1; i++) {
p = p->next;
}
Node *q = p->next;
p->next = q->next;
free(q);
}
```
注意:在实际使用中,需要对链式线性表进行初始化和销毁操作,以及对输入参数进行合法性检查。