#include<stdio.h>
#include<stdlib.h>
// 带头节点的链表
typedef struct LNode{
int data;
struct LNode* next;
}LNode,*LinkList;
//头插法建立单链表
LinkList List_HeadInsert(LinkList &L){
LNode *s;
int x=0,j=1;
L=(LinkList) malloc(sizeof(LNode));
L->next=NULL;
printf("头插法创建单链表,请输入整型数据元素:\n");
printf("请输入第%d个节点:\n",j);
scanf("%d",&x);
while(x!=-1){
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
s->next=L->next;
L->next=s;
j++;
printf("请输入第%d个节点:\n",j);
scanf("%d",&x);
}
printf("单链表创建完成\n\n");
return L;
}
//尾插法建立单链表
LinkList List_Taillnsert(LinkList& L){
LNode *s;
int x,j=1;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
LNode *r = L; //尾指针
printf("头插法创建单链表,请输入整型数据元素:\n");
printf("请输入第%d个节点:\n",j);
scanf("%d",&x);
while(x!=-1){
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
s->next=NULL;
r->next=s;
r=s;
j++;
printf("请输入第%d个节点:\n",j);
scanf("%d",&x);
}
r->next = NULL;
return L;
}
//按照序号查找节点值
LNode *GetElem(LinkList L,int i){
int j=1;
LNode *p=L->next;
if(i==0) return L;
if(i<1) return NULL;
while(p!=NULL && j<i){
p=p->next;
j++;
}
return p;
}
//按值查找表节点
LNode *LocateElem(LinkList L,int e){
LNode *p=L->next;
while(p!=NULL&&p->data!=e){
p=p->next;
}
return p;
}
//输出单链表数据元素
void PrintList(LinkList& L) {
printf("输出单链表数据元素为:\n");
LinkList p = L->next; //定义一个结点指针p指向头结点的下一个结点
while (p) //如果p不为空则循环
{
printf("%d\t", p->data); //输出
p = p->next; //移动指针p遍历链表
}
printf("\n");
}
//建立链表,插入尾插法
LinkList D_List_Taillnsert(LinkList& L,int i,int e){
LinkList p=L;
LNode* pp =GetElem(p,i-1);
LNode *s=(LNode*)malloc(sizeof(LNode));
s->data=e;
s->next=pp->next;
pp->next=s;
free(s);
return L;
}
//建立链表,插入头插法
LinkList D_List_HeadInsert(LinkList& L,int i,int e){
LinkList p=L;
LNode* pp =GetElem(p,i);
LNode *s=(LNode*)malloc(sizeof(LNode));
s->next=pp->next;
pp->next=s;
int tmp=pp->data;
pp->data=e;
s->data=tmp;
return L;
}
//删除节点操作
LNode *DeletElem(LinkList& L,int i){
LNode* p=(LNode*)malloc(sizeof(LNode));
LNode* q=(LNode*)malloc(sizeof(LNode));
p=L;
p=GetElem(p,i-1);
q=p->next;
p->next=q->next;
free(q);
return L;
}
//获取链表长度
int GetLength(LinkList L){
int length=0;
while(L->next!=NULL){
length++;
L=L->next;
}
return length;
}
int main(){
LinkList L; //声明一个指向单链表的指针
List_HeadInsert(L); //尾插法创建单链表
// LNode*s=GetElem(L,4);
// printf("第%d个节点为%d\n",4,s->data);
// LocateElem(L,4);
// printf("%s",LocateElem(L,4));
//LNode *tmp=LocateElem(L,4);
LNode *tmp=DeletElem(L,3);
PrintList(tmp); //输出单链表数据元素
return 0;
}
考研 wangdao 链表
最新推荐文章于 2024-09-11 20:39:26 发布