单链表(C语言)
#include <stdio.h>
#include <stdlib.h>
typedef int ELemType;
typedef struct Node # 定义一个单链表结构体变量
{
ELemType data;
struct Node *next;
}LinkNode,*LinkList;
LinkList CreatListFromHead() # 使用头插法创建单链表
{
LinkNode *head,*s;
char Flag='Y';
head = (LinkNode *)malloc(sizeof(LinkNode));
head->next = NULL;
printf("开始用头插法创建单链表!\n");
while (Flag == 'Y'||Flag == 'y')
{
s = (LinkNode *)malloc(sizeof(LinkNode));
printf("请输入新节点数据:");
scanf("%d",&(s->data));
s->next = head->next;
head->next = s;
getchar();
printf("是否继续插入?(Y/y):");
scanf("%c",&Flag);
}
return head;
}
LinkList CreatListFromTail() # 使用尾插法创建单链表
{
LinkNode *head,*tail,*s;
char Flag='Y';
head = (LinkNode *)malloc(sizeof(LinkNode));
tail = (LinkNode *)malloc(sizeof(LinkNode));
tail = head;
printf("开始用尾插法创建单链表!\n");
while (Flag == 'Y'||Flag == 'y')
{
s = (LinkNode *)malloc(sizeof(LinkNode));
printf("请输入新节点数据:");
scanf("%d",&(s->data));
tail->next = s;
tail = s;
getchar();
printf("是否继续插入?(Y/y):");
scanf("%c",&Flag);
}
tail->next = NULL;
return head;
}
LinkList InsertSqList(LinkNode *head,int i,ELemType e) # 单链表的插入操作
{
LinkNode *p2,*p1,*s;
int k=0;
p2 = head;
while (k < i)
{
if (p2->next == NULL)
{
printf("插入位置错误!\n");
return 0;
}
p1 = p2;
p2 = p2->next;
k++;
}
s = (LinkNode *)malloc(sizeof(LinkNode));
s->next = p1->next;
s = p1->next;
s->data = e;
return head;
}
LinkList DelectSqList(LinkNode *head,ELemType e) # 单链表的删除操作
{
int j;
LinkNode *v,*w;
v = head;
while (v->next != NULL)
{
w = v;
v = v->next;
if (v->data == e)
{
w->next = v->next;
free(v);
return head;
}
}
return head;
}
LinkList LocateSqList(LinkNode *head,ELemType e) # 单链表元素查找操作
{
LinkNode *n;
n = head;
while (n->next != NULL)
{
n = n->next;
if (n->data == e)
{
return n;
}
}
printf("查找失败,单链表中没有该元素!");
return 0;
}
int main()
{
LinkNode *p,*q;
int i,e;
p = (LinkNode *)malloc(sizeof(LinkNode));
// p = CreatListFromHead();
p = CreatListFromTail();
if (0)
{
printf("创建单链表失败!");
return 0;
}
// printf("请输入要插入节点的位置和节点数据:");
// scanf("%d,%d",&i,&e);
// p = InsertSqList(p,i,e);
// printf("请输入要删除的元素:");
// scanf("%d",&e);
// p = DelectSqList(p,e);
// printf("请输入要查找的元素:");
// scanf("%d",&e);
// q = LocateSqList(p,e);
// printf("该元素的地址:%p\n",q);
printf("单链表:");
while (p)
{
printf("%d\t",p->data);
p = p->next;
}
printf("\n");
return 0;
}
来源:CSDN
作者:XZHLZ
链接:https://blog.csdn.net/XZHSakura/article/details/104247712