C语言删除单向链表中最小值,C语言程序:在一个单链表中插入和删除一个数

懒得自己打,给你找到这个,你用后一半即可,自己改改就行了:

1、建立一个单链表,并从屏幕显示单链表元素列表。

2、从键盘输入一个数,查找在以上创建的单链表中是否存在该数;如果存在,显示它的位置;如果不存在,给出相应提示。

3、在上述的单链表中的指定位置插入指定的元素

4、删除上述单链表中指定位置的元素。

源程序:头文件

#include

#include

typedef char ElemType;

typedef int Status;

#define OK 1

#define ERROR 0

typedef struct LNode{

ElemType data;

LNode *next;

}LNode,*LinkList;

void about(){       //版本信息

cout<

}

void showmenu(){   //功能列表

cout<

<

<

<

<

<

<

<

}

//*******查看输入的全部数据*********

void PrintList(LinkList L){

LinkList p;

cout<

p=L->next;           //从头结点开始扫描

while(p){     //顺指针向后扫描,直到p->next为NULL或i=j为止

cout<data;

p=p->next; }

cout<

//逆序输入 n 个数据元素,建立带头结点的单链表

void CreateList_L(LinkList &L, int n) {

int i;

LinkList p;

L = new  LNode;

L->next = NULL;      // 先建立一个带头结点的单链表

cout<

for (i = n; i > 0; --i) {

p = new LNode;

cin>>p->data;    // 输入元素值

p->next = L->next;  L->next = p;  // 插入

}

}

// L是带头结点的链表的头指针,以 e 返回第 i 个元素

Status GetElem_L(LinkList L, int i, ElemType &e) {

int j;

LinkList p;

p = L->next;   j = 1;  // p指向第一个结点,j为计数器

while (p && jnext;  ++j;  }    // 顺指针向后查找,直到 p 指向第 i 个元素或 p 为空

if ( !p || j>i )

return ERROR;      //  第 i 个元素不存在

e = p->data;                 //  取得第 i 个元素

return OK;

}

// 本算法在链表中第i 个结点之前插入新的元素 e

Status ListInsert_L(LinkList L, int i, ElemType e) {

int j;

LinkList p,s;

p = L;    j = 0;

while (p && j 

{ p = p->next;  ++j; }   // 寻找第 i-1 个结点

if (!p || j > i-1)

return ERROR;      // i 大于表长或者小于1

s = new LNode;      // 生成新结点

if ( s == NULL)  return ERROR;

s->data = e;

s->next = p->next;      p->next = s; // 插入

return OK;

}

Status ListDelete_L(LinkList L, int i, ElemType &e)

{LinkList p,q;

int j;

p = L;    j = 0;

while (p->next && j next;   ++j; }

// 寻找第 i 个结点,并令 p 指向其前趋

if  (!(p->next) || j > i-1)

return ERROR;  // 删除位置不合理

q = p->next;   p->next = q->next;  // 删除并释放结点

e = q->data;   free(q);

return OK;

}

#include"LinkList.h"

void main()

{LinkList L;

int n,choice,i;

ElemType e;

about();

cout<

cin>>n;

CreateList_L(L, n);

showmenu();   //功能列表

cin>>choice;

while(choice!=5)

{ //输入时候退出程序

switch(choice){

case 1:PrintList(L);break;  //1.查看输入的全部数据

case 2:{

cout<

cin>>i;GetElem_L(L, i, e);

cout<

break;}  //2.查找链表元素

case 3:

{cout<

cin>>i;

cout<

cin>>e;

ListInsert_L(L, i,e);

break;}       //3.链表插入元素

case 4:

{cout<

cin>>i;

ListDelete_L(L, i, e) ;

break;}  //4.链表删除元素

default:cout<

}

cout<

cin>>choice;

}

}

还有问题留言给我!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值