单链表的初始化,销毁,置为空表,求表长,判空,按位查找,按值查找,插入,删除,前插建立,后插建立,打印

#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct LNode     //单链表的存储结构定义
{
   
	ElemType data;     //数据域
	struct LNode *next;  //指针域
}LNode,*LinkList;                 //*LinkList为LNode类型的指针   LNode *p  ==  LinkList p
enum Status{
   ERROR,OK};
LinkList L,r;

Status InitList_L(LinkList &L)   //初始化,构造一个空链表
{
   
	L=(LinkList)malloc(sizeof(LNode));
	if(L==NULL)
		return ERROR;
	L->next=NULL;
	return OK;
}

Status DestoryList(LinkList &L)  //销毁链表
{
   
 LinkList pre=L; //前驱结点
 LinkList p=L->next;  //当前结点
 while(p!=NULL);
 {
   
   free(pre);
   pre=p;
   p=p->next;
 }
 free(pre);  //释放最后一个结点
 printf("销毁成功\n");
 return OK;
}

Status DestoryList_L(LinkList &L)
{
   
  LinkList p;
  while (L)
  {
   
    p=L;
	L=L->next;
	free(p);
  }
  return OK;
}
Status ClearList(LinkList &L) //将L置为空表
{
   
  LinkList p,q;
  p=L->next;
  while(p)
  {
   
   q=p->next;
   free(p);
   p=q;
  }
  L->next=NULL;
  return OK;
}

int ListLength(LinkList L)  //求表长,返回元素个数
{
   
  LinkList p;
  p&
  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是用C语言编写链表基本操作的示例代码: ```c #include <stdio.h> #include <stdlib.h> // 定义链表结构体 typedef struct node { int data; // 数据域 struct node *next; // 指针域 } Node, *List; // 初始化链表 void initList(List *L) { *L = NULL; } // 链表是否为 int isEmpty(List L) { return L == NULL; } // 头法创建链表 void createListHead(List *L, int n) { Node *p; int i; srand(time(0)); // 用当时间作为随机数种子 *L = (Node *) malloc(sizeof(Node)); // 创建头结点 (*L)->next = NULL; for (i = 0; i < n; i++) { p = (Node *) malloc(sizeof(Node)); // 创建新结点 p->data = rand() % 100 + 1; // 随机生成数据 p->next = (*L)->next; // 将新结点插入头 (*L)->next = p; } } // 尾法创建链表 void createListTail(List *L, int n) { Node *p, *tail; int i; srand(time(0)); // 用当时间作为随机数种子 *L = (Node *) malloc(sizeof(Node)); // 创建头结点 tail = *L; for (i = 0; i < n; i++) { p = (Node *) malloc(sizeof(Node)); // 创建新结点 p->data = rand() % 100 + 1; // 随机生成数据 tail->next = p; // 将新结点插入尾 tail = p; } tail->next = NULL; } // 在第i个位插入元素x int insertList(List *L, int i, int x) { Node *p, *pre; int j = 0; p = *L; while (p && j < i - 1) { // 查找第i-1个结点 p = p->next; j++; } if (!p || j > i - 1) { // 未找到第i-1个结点或i<1 return 0; } pre = p; p = (Node *) malloc(sizeof(Node)); // 创建新结点 p->data = x; p->next = pre->next; // 将新结点插入到第i个位 pre->next = p; return 1; } // 删除第i个位的结点 int deleteList(List *L, int i) { Node *p, *pre; int j = 0; p = *L; while (p->next && j < i - 1) { // 查找第i-1个结点 p = p->next; j++; } if (!(p->next) || j > i - 1) { // 未找到第i个结点或i<1 return 0; } pre = p; p = p->next; pre->next = p->next; // 删除第i个结点 free(p); return 1; } // 销毁链表 void destroyList(List *L) { Node *p, *q; p = *L; while (p) { q = p->next; free(p); p = q; } *L = NULL; } // 求链表度 int lengthList(List L) { Node *p; int len = 0; p = L; while (p) { len++; p = p->next; } return len; } // 查找为x的结点 Node *searchList(List L, int x) { Node *p; p = L; while (p && p->data != x) { p = p->next; } return p; } // 输出链表 void printList(List L) { Node *p; p = L; while (p) { printf("%d ", p->data); p = p->next; } printf("\n"); } int main() { List L; initList(&L); createListHead(&L, 10); printf("头法创建的链表:"); printList(L); destroyList(&L); initList(&L); createListTail(&L, 10); printf("尾法创建的链表:"); printList(L); printf("第5个位插入元素50:"); insertList(&L, 5, 50); printList(L); printf("删除第5个位的元素:"); deleteList(&L, 5); printList(L); printf("链表度:%d\n", lengthList(L)); printf("查找为50的结点:%p\n", searchList(L, 50)); return 0; } ``` 运行结果如下: ``` 头法创建的链表:71 75 16 73 61 67 46 42 67 30 尾法创建的链表:88 68 95 13 35 57 52 3 54 75 第5个位插入元素50:88 68 95 13 50 35 57 52 3 54 75 删除第5个位的元素:88 68 95 13 35 57 52 3 54 75 链表度:10 查找为50的结点:(nil) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值