/*
链式存储:不要求逻辑上相邻的元素在物理位置上也相邻,
摒弃顺序存储结构上的缺点,但也失去了顺序表随机存取的优点。
单链表:只含有一个指针域,头指针没有数据域,尾指针的指针域为空。
*/
//--------线性表的单链表存储结构---------
#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;
//建立单链表:(1)头插法,(2)尾插法。
void CreatList_Head_Insret(LinkList &L,int n){
LinkList p;
L=(LinkList)malloc(sizeof(LNode)); //动态分配内存;
L->next=NULL; //建立一个带头结点的单链表。
for(int i=n;i>0;--i)
{
p=(LNode*)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next=L->next;
L->next=p;
}
printf("头插法逆序建立单链表");
}
//逆序建立单链表。
void CreatList_End_Insert(LinkList &L,int n){
LinkList p,r;
L=(LinkList)malloc(sizeof(LNode)); //动态分配内存;
L->next=NULL; //建立一个带头结点的单链表。
r=L;
for(int i=0;i<n;i++)
{
p=(LNode*)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next=r->next;
r->next=p;
r=p; //将p置为头;
}
printf("尾插法顺序建立单链表");
}
Status GetElem_L(LinkList L,int i,ElemType &e){
//L为带头结点的单链表指针
//当i个元素存在时,其赋值给e并返回OK
LinkList p;
int j=1;
p=L->next;
while(p&&j<i) {
p=p->next; ++j;
}
if(!p||j>i) return ERROR;
e=p->data;
return OK;
}
//插入算法
Status ListInsert_L(LinkList &L,int i,ElemType e){
LinkList s,p=L;
int j=0;
while(p&&j<i-1)
{//寻找第i-1个节点
p=p->next;
++j;
}
if(!p||j>i-1) return ERROR;
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
//删除算法
Status ListDelete_L(LinkList &L,int i,ElemType &e){
LinkList p=L,q;
int j=0;
while(p->next&&j>i-1) { //寻找第i个结点,并让p指向它的前驱。
p=p->next; ++j;
}
if(!p->next||j>i-1) return ERROR;
q=p->next; p->next=q->next;
e=q->data; free(q);
return OK;
}
void Print(LinkList &L) {
LinkList p=L->next;
while(p!=NULL)
{
printf("%3d",p->data);
p=p->next;
}
printf("\n");
}
void main()
{
LinkList L;
ElemType e;
int n;
printf("输入n个数据:");
scanf("%d",&n);
CreatList_Head_Insret(L,n);
Print(L);
// CreatList_End_Insert(L,5);
// Print(L);
// GetElem_L(L,2,e);
// printf("%d\n",e);
ListInsert_L(L,1,30);
ListInsert_L(L,1,5);
Print(L);
ListDelete_L(L,1,e);
ListDelete_L(L,1,e);
Print(L);
}
数据结构(C语言)线性表 -单链表
最新推荐文章于 2024-07-16 14:54:54 发布