双向链表的插入、删除、遍历
2017-07-17 15:44
218 查看
在这里我遇到过问题就是忘记把指针指向链表的头。。。。。导致程序一直挂掉
#include <stdio.h> #include <stdlib.h> struct STU { int data; struct STU *last;//前 struct STU *next;//后 }; struct STU *Creatlink_t(int n); void pri_Link(struct STU *phead); void in_Link(struct STU *phead,int n); void delete_Link(struct STU *phead); int main() { int i; struct STU *phead; printf("输入n个学生的信息"); scanf("%d",&i); phead=Creatlink_t(i); pri_Link(phead); in_Link(phead,i); pri_Link(phead); delete_Link(phead); pri_Link(phead); } struct STU *Creatlink_t(int n) { int i; struct STU *phead; struct STU *p; struct STU *pt; for(i=1;i<=n;i++) { p=(struct STU *)malloc(sizeof(struct STU)); printf("输入第%d元素:",i); scanf("%d",&p->data); if(i==1) { phead=p; p->last=NULL; p->next=NULL; pt=p; } else { pt->next=p; p->last=pt; pt=p; } } p->next=NULL; return phead; }; void pri_Link(struct STU *phead) { if(phead==NULL) { printf("链表为空\n"); return ; } struct STU *p; p=phead; while(p!=NULL) { printf("%d \n",p->data); p=p->next; } printf("\n"); } void in_Link(struct STU *phead,int n) { struct STU *pt; pt=phead; int i,num,l; printf("请输入插入位置:"); scanf("%d",&l); printf("请输入插入元素的值:"); scanf("%d",&num); for(i = 1;i < l-1; i++) pt = pt->next; struct STU *p=(struct STU *)malloc(sizeof(struct STU )); // while(p) // { p->data=num; p->next=pt->next; pt->next->last=p; p->last=pt; pt->next=p; } void delete_Link(struct STU *phead) { struct STU *p; p=phead; int nd,tempi=1; printf("输入删除的值\n"); scanf("%d",&nd); while((tempi++) != nd && p != NULL) { p = p->next; } if(p == NULL) printf("位置不合法。\n"); else if(p->next == NULL) { p->last->next = NULL; free(p); } else { p->last->next=p->next; p->next->last=p->last; free(p); } }
相关文章推荐
- 双向链表的功能实现:初始化,插入,按位置插入,按位置删除,按值删除,遍历打印等
- 双向链表的有关操作(创建,遍历,插入,删除)
- 双向循环链表的插入和删除
- (C++版)链表(四)——实现双向循环链表创建、插入、删除等简单操作
- java建立双向链表,插入结点,删除节点
- 初始化链表 ,插入结点,删除结点,返回结点位置 ,遍历链表 。
- 实现双向链表删除一个节点P,在节点P后插入一个节点
- 双向循环链表 初始化 插入 删除
- (C++版)链表(三)——实现双向链表的创建、插入、删除等简单操作
- 循环链表的初始化、插入、删除、返回结点位置、遍历
- 链表中头和尾节点/指针的常规用法:插入、删除、遍历
- 双向非循环递增链表——插入,删除,清空
- 链表的初始化、遍历、删除、插入、判断是否为空、求长度 C语言实现
- 双向链表的插入及删除图解
- C语言实现双向链表删除节点、插入节点、双向输出等操作
- (C语言版)链表(四)——实现双向循环链表创建、插入、删除、释放内存等简单操作
- 两种双向链表的首项插入与删除效率比较
- (C++版)链表(四)——实现双向循环链表创建、插入、删除等简单操作
- list(链表)常用成员(顺序容器)----插入push_back,push_front,insert删除pop_back,pop_front,erase,clear遍历begin,end判空emp
- 单向循环链表创建、遍历、插入、删除、查找(按位置,按元素值)、清空、销毁