算法思路
定义四个指针:
p用于遍历链表,pre用于保存p的前驱防止断链。
minp用于标记当前链表最小值,minpre用于保存minp的前驱防止断链,方便删除。
算法设计
1)设计链表结点结构体
typedef struct LNode { int data;//数据域 struct LNode* next;//指向后继的指针 }LNode,*linkList;//给struct LNode起别名:LNode,给LNode* 起别名linkList
2)Del_min() 设计
void Del_Listmin(linkList L) { LNode* pre=L; LNode* p=pre->next; LNode* minpre=L; LNode* minp=minpre->next; while(p) { if(p->datadata) { minp=p; minpre=pre; pre=p; p=p->next; } else { pre=p; p=p->next; } } minpre->next=minp->next; free(minp); }
为了方便查看链表信息,设计一个查看链表元素的函数
ShowList(linkList L)
//查看传入链表的结点值情况 void ShowList(linkList L) { LNode* p=L->next; while(p) { if(p->next) { printf("%d->",p->data); } else { printf("%d",p->data); } p=p->next; } printf("n"); }
尾插法创建链表算法
//尾插法创建链表 linkList Creat_linkList() { LNode* s=NULL;//s用于标记插入结点 int input=0; linkList L=(LNode*)malloc(sizeof(LNode)); LNode* rear=L;//建立尾指针指向链表最后一个元素 printf("请输入整型数据,回车确认,输入-1完成链表创建:n"); scanf("%d",&input); while(input!=-1) { s=(LNode*)malloc(sizeof(LNode)); s->data=input; rear->next=s; rear=s; scanf("%d",&input); } rear->next=NULL; printf("链表建立成功!n"); return L; }
main.c中执行代码如下:
int main() { linkList L=Creat_linkList(); ShowList(L); Del_Listmin(L); ShowList(L); return 0; }
结果如图所示:
1表示链表结束
链表中有些常用过的方法可以自己整理成文件 linkList.h
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)