数据结构链表的逆序创建,插入,删除——个人学习
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
typedef int Elemtype;
typedef int status;
typedef struct Lnode {
Elemtype data;
struct Lnode* next;
}Lnode, * linklist;
linklist CreateList_L(linklist& L)
{
linklist p;
int n;
L = (linklist)malloc(sizeof(Lnode));
L->next = NULL;
printf("请输入将要载入链表的元素个数:");
scanf_s("%d", &n);
getchar();
printf("请逆序输入%d个元素的值:\n", n);
for (int i = n; i > 0;i--)
{
p = (linklist)malloc(sizeof(Lnode));
scanf_s("%d", &p->data);
p->next = L->next;
L->next = p;
}
printf("逆序建立带表头结点的单链表完成!\n\n");
printf("请选择您的下一步操作:");
return L;
}
status VisitList(linklist& L)
{
linklist p;
int i = 1;
p = L->next;
if (L->next == NULL)
return ERROR;
printf("输出单链表:\n");
while (p->next != NULL)
{
printf("%d ", p->data);
p = p->next;
i++;
}
printf("%d\n", p->data);
printf("链表长度为:%d\n", i);
printf("计算链表长度并输出单链表完成!\n\n");
printf("请选择您的下一步操作:");
return OK;
}
status ListInsert_L(linklist& L)
{
int i;
printf("请您选择在那个元素之前插入:");
scanf_s("%d", &i);
Elemtype e;
linklist p = L, s;
int j = 0;
while (p && j < i - 1)
{
p = p->next;
j++;
}
if (!p || j > i - 1) return ERROR;
printf("您选择插入的数值为:");
scanf_s("%d",&e);
s = (linklist)malloc(sizeof(Lnode));
s->data = e;
s->next = p->next;
p->next = s;
printf("插入完成!\n\n");
printf("请选择您的下一步操作:");
return OK;
}
status ListDelete_L(linklist& L)
{
Elemtype x;
printf("请您输入需要删除节点的值x: ");
scanf_s("%d", &x);
getchar();
linklist p = L, q;
while (p->next && p->next->data != x)
{
p = p->next;
}
if (!(p->next)) return ERROR;
q = p->next;
p->next = q->next;
free(q);
printf("删除操作完成!\n\n");
printf("请选择您的下一步操作:");
return OK;
}
void main()
{
linklist L1;
printf("\n\n");
printf(" ——————请您按提示操作Linklist——————\n");
printf("|| 按(1)建立带头节点的单链表 ||\n");
printf("|| 按(2)插入节点 ||\n");
printf("|| 按(3)计算链表长度并输出单链表 ||\n");
printf("|| 按(4)删除节点值为x的结点 ||\n");
printf("|| 按(0)退出系统 ||\n");
printf(" ——————————————————————————————————\n");
int choice;
printf(" 请输入选择:");
while (scanf_s("%d", &choice))
{
getchar();
printf("\n");
switch (choice)
{
case 1:
CreateList_L(L1);
break;
case 2:
ListInsert_L(L1);
break;
case 3:
VisitList(L1);
break;
case 4:
ListDelete_L(L1);
break;
case 0:exit(0);
default:
printf(" Input error!");
break;
}
}
}
## 如果对您有帮助请关注我,或者我自己学习用的微信公众号:星谐!