#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int num;
int data;
struct node * next;
}node;
node * init(int );//创建链表
void display(node *);//遍历链表
void dis(node *);//释放链表
void modify(node *, int ,int );//修改链表
void del(node * , int );//删除节点
void insert(node *, int ,int );//插入节点
int main(void)
{
int n;
node * head, * current;
scanf("%d", &n);
head = init(n);
display(head);
insert(head, 2, 100);
display(head);
modify(head, 5, 10);
display(head);
del(head, 4);
display(head);
dis(head);
return 0;
}
node * init(int n)
{
int i;
node * head, * current, * pre;
head = (node *)malloc(sizeof(node));
head->next = NULL;
pre = head;
for (i = 1; i <= n; ++i)
{
current = (node *)malloc(sizeof(node));
pre->next = current;
current->num = i;
current->data = 10 - i;
current->next = NULL;
pre = current;
}
return head;
}
void insert(node * head, int p, int k)
{
node * current, * t, * newnode;
current = head;
while (current->next->num != p)//找到编号为p的节点的前驱
current = current->next;
t = current->next;//t是编号为p的节点
newnode = (node *)malloc(sizeof(node));
newnode->num = current->num;
newnode->data = k;
newnode->next = t;//新节点的后继是编号为p的节点
current->next = newnode;//新节点的前驱是编号为p的节点的前驱
current = newnode;//改变编号
while (current->next != NULL)
{
current->num++;
current = current->next;
}
current->num++;
}
void modify(node * head, int p, int k)
{
node * current;
current = head->next;
while (current->num != p)//找到编号为p的节点
current = current->next;
current->data = k;
}
void del(node * head, int p)
{
node * current, * t;
current = head;
while (current->next->num != p)//找到编号为p的节点的前驱
current = current->next;
t = current->next;
current->next = current->next->next;
free(t);
current = current->next;//改变编号
while (current->next != NULL)
{
current->num--;
current = current->next;
}
current->num--;
}
void display(node * head)
{
node * current;
current = head->next;
while (current->next != NULL)
{
printf("%d ", current->num);
current = current->next;
}
printf("%d\n", current->num);
current = head->next;
while (current->next != NULL)
{
printf("%d ", current->data);
current = current->next;
}
printf("%d\n\n", current->data);
}
void dis(node * head)
{
node * current, * p;
current = head->next;
while ((p = current->next) != NULL)
{
free(current);
current = p;
}
free(current);
}
数据结构--单链表
最新推荐文章于 2023-06-27 15:33:49 发布