郝斌数据结构(链表程序代码)

更新时间:2023-05-09 20:48:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

链表C语言源代码

# include <stdio.h>

# include <malloc.h>

# include <stdlib.h>

typedef struct node

{

int date;//数据域

struct node *pnext;//指针域

}NODE,*PNODE;//NODE等价于struct node ,*PNODE等价于struct node *

PNODE create_list(void)

{

int len;//用来存放有效节点的个数

int i;

int val;//用来临时存放用户输入的节点值 //分配首地址 PNODE phead = (PNODE)malloc(sizeof(NODE)); if(NULL == phead) { printf("内存分配失败,程序终止!\n"); exit(-1); } PNODE ptail = phead; ptail->pnext =NULL; printf("请输入您要创建的链表的节点个数:len = "); scanf("%d",&len); if (0 == len) { printf("您输入的节点个数无效!\n"); } //创建链表 for(i=0;i<len;++i) { printf("请输入第%d个节点的值:",i+1); scanf("%d",&val); PNODE pnew = (PNODE)malloc(sizeof(NODE)); if(NULL == pnew) { printf("内存分配失败,程序终止!\n"); exit(-1); } pnew->date = val; ptail->pnext = pnew; pnew->pnext = NULL; ptail = pnew;

链表C语言源代码

} } return phead;

//输出链表函数

void traverse_list(PNODE phead)

{

PNODE p = phead->pnext;

while (NULL != p)

{

printf("%d ",p->date);

p = p->pnext;

}

printf("\n");

return;

}

//判断链表是否为空链表函数

bool is_empty(PNODE phead)

{

if(NULL == phead->pnext)

return true;

else

return false;

}

//判断链表长度函数

int length_list(PNODE phead)

{

int len =0;

PNODE p =phead->pnext;

while (NULL != p)

{

++len;

p = p->pnext;

}

return len;

}

//在phead所指向链表的第pos个节点的前面插入一个新的节点,该节点的值是val,并且pos的值从1开始

bool insert_list(PNODE phead,int pos,int val)

{

int i = 0;

PNODE p = phead;

链表C语言源代码

{ p = p->pnext; ++i; } if (i>pos-1 || NULL == p) return false; PNODE pnew = (PNODE)malloc(sizeof(NODE)); if (NULL == pnew) {

printf("动态分配内存失败!\n");

exit(-1);

}

pnew->date = val;

PNODE q = p->pnext;

p->pnext = pnew;

pnew->pnext = q;

return true;

}

//链表的删除

bool delete_list(PNODE phead,int pos,int *pval)

{

int i = 0;

PNODE p = phead;

while (NULL!=p->pnext && i<pos-1)

{

p = p->pnext;

++i;

}

if (i>pos-1 || NULL==p->pnext)

return false;

PNODE q = p->pnext;

*pval = q->date;

//删除p节点后面的结点

p->pnext = p->pnext->pnext;

free(q);

q = NULL;

return true;

}

//链表排序

void soert_list(PNODE phead)

{

int i,j,t;

链表C语言源代码

int len = length_list(phead);

PNODE p,q;

for(i=0,p = phead->pnext;i<len-1;++i,p = p->pnext)

{

for(j = i+1,q = p->pnext;j<len;++j,q = q->pnext)

{

if(p->date > q->date)

{

t = p->date;

p->date = q->date;

q->date = t;

}

}

}

return;

}

int main(void)

{

PNODE phead = NULL;//等价于struct node *phead=NULL

int val;

phead = create_list();//create_list()函数功能:创建一个非循环单链表,并且将该链表的头节点的地址付给phead

traverse_list(phead);

if(is_empty(phead))

} printf("链表为空!\n"); else printf("链表不为空!\n"); int len = length_list(phead); printf("链表长度为%d\n",len); soert_list(phead); traverse_list(phead); insert_list(phead,4,33); if(delete_list(phead,4,&val)) { printf("删除成功,您删除的元素是:%d\n",val); } else { printf("删除失败!您删除的元素不存在!\n"); } return 0;

本文来源:https://www.bwwdw.com/article/dyxe.html

Top