#include <stdio.h>
#include <stdlib.h>
#define error 0
#define ok 1
typedef int Status;
typedef int ElemType;
typedef struct Node{
ElemType data;
Node *next;
}*LinkList;
//typedef struct Node *LinkList;
//初始化
Status InitList_Sq(LinkList L){
L=new Node;
L->next=NULL;
return ok;
}
//判断空表
Status ListEmpty(LinkList L){
if(L->next)
return 0;
else
return 1;
}
//销毁表
Status destroy_Lq(LinkList L){
LinkList p;
while(L){
p=L;
L=L->next;
free(p);
}
return ok;
}
//清空链表
Status ClearList(LinkList &L){
LinkList p,q;
p=L->next;
while(p){
q=p->next;
free(p);
p=q;
}
L->next=NULL;
return ok;
}
//计算表长
Status LengthList(LinkList &L){
LinkList p;
int i=0;
p=L->next;
while(p){
i++;
p=p->next;
}
printf("%d",i);
printf("\n");
return ok;
}
//取单链表中第i个值
Status Getdata(LinkList &L,int i,int e){
LinkList p;
p=L->next;
int j=1;
while(p&&j<i){
p=p->next;
++j;
}
if(!p||j>i)return error;
printf("%d\n",e=p->data);
return ok;
}
//按值查找
int Finddata(LinkList &L,int e){
LinkList p;
int j=1;
p=L->next;
while(p->data!=e&&p){
p=p->next;
++j;
}
printf("%d\n",j);
/*if(j<0||j>LengthList(L))
return error;*/
return 0;
}
//插入
Status Sertdata(LinkList &L,int i,int e){
LinkList p,s;
int j=1;
s=new Node;
s->data=e;
p=L->next;
while(p&&j<i-1){
p=p->next;
++j;
}
if(!p||j>i-1)return error;
s->next=p->next;
p->next=s;
return ok;
}
//删除
Status Deletedata(LinkList L,int i,int e){
LinkList p,q;
p=L;
int j=0;
while(p->next&&j<i-1){
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;
}
//头插法
Status CreatList(LinkList &L,int n){
LinkList p;
int i;
L=new Node;
L->next=NULL;
for(i=n;i>0;--i){
p=new Node;
scanf("%d",&(p->data));
p->next=L->next;
L->next=p;
}
return ok;
}
//输出
void Printf(LinkList L){
LinkList p;
p=L->next;
while(p){
printf("%d",p->data);
p=p->next;
}
printf("\n");
}
void menu()
{
printf("********1.初始化创建头插法 2.插入 ******\n");
printf("********3.删除 4.按值查找******\n");
printf("********5.输出 6.计算表长 ******\n");
printf("********7.取单链表中第i个值 8.销毁表 ******\n");
printf("********9.清空链表 10.退出 *****\n");
}
void main(){
LinkList L;
int choice,k,a;
while (1)
{
menu();
printf("请输入菜单序号:\n");
scanf("%d", &choice);
switch (choice)
{
case 1:CreatList(L,5); break;
case 2:Sertdata(L,3,5); break;
case 3:printf("删除第k个元素\n");scanf("%d",&k);Deletedata(L,k,5); break;
case 4:printf("按值查找\n");scanf("%d",&k);Finddata(L,k); break;
case 5:Printf(L); break;
case 6:LengthList(L); break;
case 7:printf("取单链表中第k个值\n");scanf("%d",&k);Getdata(L,k,5); break;
case 8:destroy_Lq(L); break;
case 9:ClearList(L); break;
case 10:exit(0);
default:printf("输入错误!!!\n");
}
}
}
线性单链表究极代码
最新推荐文章于 2023-04-23 18:03:05 发布
这个博客展示了如何使用C语言实现链表的各种操作,包括初始化、判断空表、销毁表、清空链表、计算表长、取指定位置元素、按值查找、插入和删除元素。还包含了头插法创建链表以及输出链表内容的函数。博客提供了一个简单的链表操作的代码实现,并通过菜单驱动的用户交互来演示这些操作。
摘要由CSDN通过智能技术生成