╮ 潜心 ╰ edited 7 年前
复习时顺便把顺序链表的题也用链式的实现了一遍
只打了前三题 分别是线性表、线性表比较和顺序表去重
后续有补充再更吧
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int data;
struct node *next;
} node;
node *Creat_List (int n) {
//创建一个长度为n的线性链表,并返回表头
node *head = (node *)malloc(sizeof(node));
head->next = NULL;
int input;
node *p = head;
while (n--) {
scanf("%d", &input);
node *q = (node *)malloc(sizeof(node));
q->data = input;
p->next = q;
q->next = NULL;
p = q;
}
return head;
}
void Print_List (node *head) {
//输出线性表中所有元素(元素用空格分隔,行末无空格)
node *p = head->next;
while (p != NULL) {
printf("%d%c", p->data, p->next == NULL? '\n': ' ');
p = p->next;
}
}
void Destroy_List (node *head) {
//销毁线性链表
node *p;
while (head) {
p = head->next;
free(head);
head = p;
}
}
int Delete_Elem (node *head, int pos) {
//删除线性链表的第n个元素(索引起始为1),下标非法返回-1,合法返回删除元素的值
int cnt = 0, elem;
node *p = head, *q; //q为待删节点
while (p->next && cnt < pos - 1) {
++cnt;
p = p->next;
}
if (!p->next || cnt > pos - 1) return -1;
q = p->next;
p->next = q->next;
elem = q->data;
free(q);
return elem;
}
int comp (node *a, node *b) {
//线性表比较:a>b返回1,a==b返回0,a<b返回-1
node *p = a->next, *q = b->next;
while (p && q) {
if (p->data > q->data) return 1;
else if (p->data < q->data) return -1;
p = p->next;
q = q->next;
}
if (!p || p->data < q->data) return -1;
else if (!q || p->data > q->data) return 1;
else return 0;
}
void Reverse_List (node *head) {
node *p = head->next, *p_next = NULL, *p_prev;
head->next = NULL;
while (p) {
p_prev = p->next;
p->next = p_next;
p_next = p;
p = p_prev;
}
head->next = p_next;
}
int main()
{
//freopen("testin.txt", "r", stdin);
/*
//线性表删除的主函数
int n, m, pos;
scanf("%d", &n);
node *head = Creat_List (n);
scanf("%d", &m);
while (m--) {
scanf("%d", &pos);
printf("%d\n", Delete_Elem(head, pos));
}
Destroy_List(head);
//线性表比较的主函数
int na, nb;
scanf("%d%d", &na, &nb);
node *a = Creat_List (na);
node *b = Creat_List (nb);
printf("%d\n", comp(a, b));
Destroy_List(a);
Destroy_List(b);
//倒置顺序表的主函数
int n;
scanf("%d", &n);
node *head = Creat_List (n);
Print_List(head);
Reverse_List (head);
Print_List(head);
Destroy_List(head);
*/
return 0;
}
顶
666