#include<stdio.h>
#include<stdlib.h>
struct node{
int data;
node * next;
};
node * head = {NULL};
/*根据元素值删除元素*/
void del_by_data(int del_data)
{
node * p = NULL;
node * pre = NULL;
p = head;
while (p != NULL)
{
if (del_data == p->data)
{
if (pre != NULL)
{
pre->next = p->next;//删除之后改变结点的指向
}
if (p == head){
head = p->next;//要删除的元素恰好是头节点
}
free(p);
return;
}
pre = p;
p = p->next;//遍历结点
}
return;
}
/*在链表末尾加入一个元素*/
void add_rear(int add_data)
{
if (head != NULL)
{
node * add_point, *tmp_point;
add_point = (node *)malloc(sizeof(node));//为插入的结点的分配内存
add_point->data = add_data;
add_point->next = NULL;
tmp_point = head;//指向头结点
while (tmp_point->next != NULL)
{
tmp_point = tmp_point->next;//遍历链表指向尾结点
}
tmp_point->next = add_point;//插入结点
}
else//链表为空
{
head = (node *)malloc(sizeof(node));
head->data = add_data;
head->next = NULL;
}
}
/*在链表前端加入一个元素*/
void add_front(int add_data)
{
if (head != NULL)
{
node * add_point = (node *)malloc(sizeof(node));
add_point->data = add_data;
add_point->next = head;
head = add_point;
}
else
{
head = (node *)malloc(sizeof(node));
head->data = add_data;
head->next = NULL;
}
}
void output()
{
node *p = (node *)malloc(sizeof(node));
p = head;
while (p != NULL)
{
printf("%4d", p->data);
p = p->next;
}
printf("\n");
}
int main()
{
int ins, data;
while (1)
{
printf("1.insert a value in front\n");
printf("2.insert a value in rear\n");
printf("3.delete a value\n");
printf("4.quit\n");
scanf("%d", &ins);
switch (ins)
{
case 1:
printf("please insert a value:");
scanf("%d", &data);
add_front(data);
break;
case 2:
printf("please insert a value:");
scanf("%d", &data);
add_rear(data);
break;
case 3:
printf("please insert a value:");
scanf("%d", &data);
del_by_data(data);
break;
default:
goto loop;
}
}
loop:
output();
system("pasue");
return 0;
}
数据结构——指针仿真链表
最新推荐文章于 2021-09-24 17:42:35 发布