单链表是一种最基本的数据结构,也是线性表中最基本的数据结构。至于什么是单链表,看官可以回忆一下大学老师的讲解或者去度娘那儿看看。下面结合代码聊一聊单链表的建立 查找 插入 删除以及整表删除。
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType,Status;
typedef struct Node
{
ElemType data;
struct Node *next;
}Node,*LinkList;
LinkList LinkListCreatH()
{
Node *L;
L = (Node *)malloc(sizeof(Node));
L->next = NULL;
ElemType x;
while(scanf("%d",&x) != EOF)
{
Node *p;
p = (Node *)malloc(sizeof(Node));
p->data = x;
p->next = L->next;
L->next = p;
}
return L;
}
LinkList LinkListCreatT()
{
Node *L;
L = (Node *)malloc(sizeof(Node));
L->next = NULL;
Node *r;
r = L;
ElemType x;
while(scanf("%d",&x) != EOF)
{
Node *p;
p = (Node *)malloc(sizeof(Node));
p->data = x;
r->next = p;
r = p;
}
r->next = NULL;
return L;
}
Status ClearList(LinkList *L)
{
LinkList p,q;
p = (*L)->next;
while(p)
{
q = p->next;
free(p);
p = q;
}
(*L)->next = NULL;
return OK;
}
Node* GetNode(LinkList L,int i)
{
int j;
Node *p;
p = L; j = 0;
while(p->next && j<i){
p = p-> next;
j++;
}
if(i == j)
return p;
else return NULL;
}
Node* LocateNode(LinkList L,ElemType key)
{
Node* p = L->next;
while(p&&p->data!=x)
p = p->next;
return p;
}
LinkList LinkListInsert(LinkList L,int i,ElemType x)
{
Node *pre;
pre = L;
int tempi = 0;
for (tempi = 1; tempi < i; tempi++)
pre = pre->next;
Node *p;
p = (Node *)malloc(sizeof(Node));
p->data = x;
p->next = pre->next;
pre->next = p;
return L;
}
LinkList LinkListDelete(LinkList L,ElemType x)
{
Node *p,*pre;
p = L->next;
while(p->data != x)
{
pre = p;
p = p->next;
}
pre->next = p->next;
free(p);
return L;
}
int main()
{
LinkList list,start;
printf("请输入单链表的数据:");
list = LinkListCreatT();
for(start = list->next; start != NULL; start = start->next)
printf("%d ",start->data);
printf("/n");
int i;
ElemType x;
printf("请输入插入数据的位置:");
scanf("%d",&i);
printf("请输入插入数据的值:");
scanf("%d",&x);
LinkListInsert(list,i,x);
for(start = list->next; start != NULL; start = start->next)
printf("%d ",start->data);
printf("/n");
printf("请输入要删除的元素的值:");
scanf("%d",&x);
LinkListDelete(list,x);
for(start = list->next; start != NULL; start = start->next)
printf("%d ",start->data);
printf("/n");
return 0;
}
每种数据结构都要考虑性能,单链表的性能主要考虑空间复杂度和时间复杂度,空间复杂度嘛结点越多占的空间越多,完全是线性的。空间复杂度在插入 查找 删除中最坏的情况无非也就是O(n)了。