#include <stdio.h>
#include <stdlib.h>
typedef struct LNode
{
int data;//数据域
struct LNode *next;//指针域,递归定义
}LNode,*LinkList;
//初始化单链表
void InitList(LNode *L){
L = (LinkList)malloc(sizeof(LNode));//分配头结点
L->next = NULL;
}
//头插法建立单链表
LinkList List_HeadInsert(LNode *L){
LNode *s;
int x;//输入
InitList(L);//初始化,创建头结点,初始化为空链表
scanf("%d",&x);
while(x!=9999){
s = (LinkList)malloc(sizeof(LNode));//分配结点
s->data = x;
s->next = L->next;
L->next = s;
scanf("%d",&x);
}
return L;
}
//尾插法建立单链表
LinkList List_TailInsert(LNode *L){
InitList(L);
int x;//输入
LNode *s,*r = L;//s创建结点存储数据,r作为表尾指针
scanf("%d",&x);
while (x!=9999)
{
s = (LinkList)malloc(sizeof(LNode));
s->data = x;
r->next = s;
r = s;
scanf("%d",&x);
}
r->next = NULL;
return L;
}
//按序号查找结点
LNode *GetElem(LinkList L,int i){
if(i<1)
return NULL;
int j = 1;//计数
LNode *p = L->next;//第一个结点赋值给p
while(p && j<i){
p = p->next;
j++;
}
return p;
}
//按值查找结点
LNode *LocateElem(LinkList L,int e){
LNode *p = L->next;
while(p && p->data != e){
p=p->next;
}
return p;
}
//插入元素
void InsertList(LinkList L,int i,int e)
{
LinkList temp = L;
int j = 1;
while(j<i)//找到第i个的位置
{
temp = temp->next;
j++;
}
LinkList p = (LinkList)malloc(sizeof(LNode));//申请内存空间
//三者的顺序不能换
p->data = e;
p->next = temp->next;
temp->next = p;
}
//删除元素
void DeleteList(LinkList L,int i)
{
LinkList temp = L;
int j = 1;
while(j<i)//找到位置
{
temp = temp->next;
j++;
}
LinkList p = temp->next;
temp->next = p->next;//不可以是p->next->next
free(p);
}
//遍历单链表
void Print_List(LNode *L){
LNode *t = L;
while(t->next){
t = t->next;
printf("%d ",t->data);
}
}
int main(int argc, char const *argv[])
{
LNode L;
//List_HeadInsert(&L);
List_TailInsert(&L);
Print_List(&L);
return 0;
}
带头结点的单链表
最新推荐文章于 2024-07-24 17:54:05 发布