数据结构基础---C语言实现单链表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构基础---C语言实现单链表相关的知识,希望对你有一定的参考价值。
#include<stdio.h> #include<malloc.h> #include<stdbool.h> /** **链表节点的定义 */ typedef struct Node{ int data;//数据域 struct Node * PNext;//指针域,存放下一个节点的地址 } Node ,* PNode ; /** **创建链表 */ PNode create_list() { int len,i; printf("请输入链表的长度:len=\n"); scanf("%d",&len); PNode PHead=malloc(sizeof(Node)); PHead->PNext=NULL; PNode PTail=PHead;//PTail是永远指向尾节点的指针 for(i=0;i<len;i++) { int val; printf("请输入第 %d 个元素的值:", i+1); scanf("%d",&val); PNode PNew=malloc(sizeof(Node)); PNew->data=val; PNew->PNext=NULL; PTail->PNext=PNew; PTail=PNew; } return PHead; } /** **对链表进行遍历 */ void traverse(PNode pHead) { PNode p=pHead->PNext; while(p!=NULL) { printf("%d ",p->data); p=p->PNext; } printf("\n"); } /** *推断链表是否为空 */ bool isempty(PNode pHead) { if(NULL==pHead->PNext) { return true; }else{ return false; } } /** **获取链表的长度 */ int list_num (PNode pHead) { int num=0; PNode p=pHead->PNext; while(p!=NULL) { num++; p=p->PNext; } return num; } /** *向链表中插入元素 */ bool insert_list(PNode pHead,int val ,int pos){ //须要找到第pos个位置。而且须要推断这个位置pos是否合法 //i是p所指节点的位置,所以从一開始。为什么要pos-1呢,由于用的是while 当i=pos-1时跳出循环 int i=0; PNode p=pHead; while(NULL!=p&&i<pos-1) { i++; p=p->PNext; } //假设插入位置过大,那么P=NULL, //假设插入的位置是0或者负数,那么i>pos-1 if(i>pos-1||NULL==p) { printf("插入位置不合法\n"); return false; } PNode PNew=malloc(sizeof(PNode)); PNew->data=val; PNode temp=p->PNext; p->PNext=PNew; PNew->PNext=temp; return true; } /** **在链表中删除节点 */ delete (PNode PHead,int pos , int * pval) { int i=0; PNode p=PHead; //我们要删除p后面的节点,所以p不能指向最后一个节点 p->next!=NULL while(p->PNext!=NULL&&i<pos-1){ p=p->PNext; i++; } if(i>pos-1||p->PNext==NULL) { printf("删除位置不合法\n"); return false; } PNode temp=p->PNext; p->PNext=temp->PNext; free(temp); } int main() { PNode PHead= create_list(); if(isempty(PHead)) printf("链表为空\n"); printf("链表的长度为:%d\n",list_num(PHead)); traverse(PHead); //insert_list(PHead,55,1); int val; delete(PHead,6,&val); traverse(PHead); return 0; }
以上是关于数据结构基础---C语言实现单链表的主要内容,如果未能解决你的问题,请参考以下文章
数据结构作业~急求~~~用c语言或c++ 使用单链表实现系统进程列表,完成插入、删除、查询等操作。