单链表的练习-头插法
/*单链表的练习-头插法*//*单链表由头结点就可以唯一确定*/#include <malloc.h>#include <stdio.h>#include <stdlib.h>//定义单链表结构typedef struct Node{int data; //数据域Node * pNext; //指针域}NODE,* PNODE;PNODE create_list(void); //创建链表void show_list(PNODE pHead); //显示链表void insert(PNODE pHead,int pos,int inval); //向链表中某个位置插入元素int deleteList(PNODE pHead,int pos); //删除链表某个位置上的值void find(PNODE pHead,int fval); //在链表中查找某个元素void main(){PNODE pHead = NULL; //定义一个头结点,初始值为空pHead = create_list();show_list(pHead);insert(pHead,2,100);show_list(pHead);find(pHead,3);printf("你所删除的值是%d\n",deleteList(pHead,2));show_list(pHead);}PNODE create_list(void){int length,val;PNODE pHead = (PNODE)malloc(sizeof(NODE)); //向内存申请头节点空间pHead->pNext=NULL; //开始的时候只有头结点自身,没有其它结点if(NULL == pHead){printf("分配失败,程序终止");exit(-1);}printf("请输入需要生成的单链表的长度:");scanf("%d",&length);for(int i=0;i<length;i++){ //for循环生成指定个数的结点printf("请输入第%d个节点的值: ",i+1);scanf("%d",&val);PNODE pNew = (PNODE)malloc(sizeof(NODE));if(NULL == pNew){printf("分配失败,程序终止");exit(-1);}pNew->data=val; //给新申请的结点数据域赋值pNew->pNext=pHead->pNext; //头指针指向的下一个结点的地址赋给了新结点的指针域,也就是在当前头结点后面直接插入一个新结点pHead->pNext=pNew; //头结点指向了新的结点}return pHead; //函数返回头结点的地址}void show_list(PNODE pHead){printf("单链表的值如下:\n");PNODE P = pHead->pNext;while(P != NULL){ //while巡检打印出所以结点,直到下个结点不存在printf("%d ",P->data);P=P->pNext;}printf("\n");}void insert(PNODE pHead,int pos,int inval){PNODE P = pHead;int j=0;while(P != NULL && j<pos-1){ //如果结点不为空,把P指针移动到插入位置的前一个结点位置P = P->pNext;j++;}if(P == NULL){printf("插入失败\n");exit(-1);}else{PNODE pNew = (PNODE)malloc(sizeof(NODE)); //申请新的结点pNew->data=inval; //将要插入的值赋值给新结点的数据域pNew->pNext=P->pNext; //新结点指向P指针指向的下一个结点P->pNext=pNew; //P指针所在的结点指向新结点printf("你已经成功的插入了元素%d到链表中.\n",inval);}}int deleteList(PNODE pHead,int pos){PNODE P = pHead,S;int j=0,x;if(P != NULL && j<pos-1){P = P->pNext;j++;}if(P == NULL){printf("删除失败,数组是空的");exit(-1);}else{S = P->pNext;P->pNext = S->pNext;x = S->data;free(S);return x;}}void find(PNODE pHead,int fval){PNODE P = pHead;int cnt=0;if(P == NULL){printf("不用找了,链表是空的\n");exit(-1);}while(P != NULL){P = P->pNext;++cnt;if(P->data==fval){printf("你要找的数%d在链表中,它在链表的第%d个位置\n",fval,cnt);break;}}}
结果截图
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。