单链表操作

    xiaoxiao2021-04-15  78

    #include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR 0 //单链表类型定义 typedef struct node { int data; struct node *next; }LNode, *LinkList; //单链表的创建 (尾插法) LinkList Creat_LinkList( ) { LNode *s,*r;int x; LinkList H = (LinkList) malloc(sizeof(LNode)); H->next = NULL;r=H; scanf("%d",&x); while(x!=-1) { s = (LinkList) malloc(sizeof(LNode)); s->data=x; s->next = r->next; r->next = s; r=s; scanf("%d",&x); }return H; } //按序号查找 LinkList Get_LinkList(LinkList H,int k) { LNode *p; int j=1; p=H->next; while(p->next!=NULL && j<k) { p=p->next; j++; } if(j==k)return p; else return NULL; } //单链表的插入 int Insert_LinkList(LinkList H, int i, int x) { //插入代码; LNode *p,*s; p = Get_LinkList(H,i-1); //查找插入的 前一个位置 if (p == NULL) { printf("插入失败"); return ERROR; } s = (LNode*)malloc(sizeof(LNode)); s->data = x; s->next = p->next; p->next = s; return OK; } //单链表的删除 int Del_LinkList(LinkList H,int i) { //删除代码; LNode *p,*q; p = Get_LinkList(H,i-1); if (p == NULL || p->next == NULL)//前一个为空,或者当前的为空 { printf("删除失败"); return ERROR; } q = p->next; p->next = q->next; free(q); return OK; } //单链表的输出 void Print_LinkList(LinkList H) { LNode *p; p=H->next; while(p!=NULL) { printf("%d->",p->data); p=p->next; } printf("end\n"); } void nz(LinkList H) { LinkList p,q; p = H->next; H->next = NULL; while (p) { q = p;//保存当前节点的后一个节点 p = p->next; q->next = H->next; H->next = q; } } main() { LinkList H,p; int i,num,x; H=Creat_LinkList( ); Print_LinkList(H); printf("请输入要插入的序号:\n"); scanf("%d",&num); printf("请输入要插入的值:\n"); scanf("%d",&x); if(Insert_LinkList(H,num,x)==OK) { printf("插入成功!\n");Print_LinkList(H);} else printf("插入失败!\n"); //调用删除代码; printf("请输入要删除的序号:\n"); scanf("%d",&num); if(Del_LinkList(H,num)==OK) { printf("删除成功!\n"); Print_LinkList(H);} else printf("删除失败!\n"); nz(H);//逆置 Print_LinkList(H); }
    转载请注明原文地址: https://ju.6miu.com/read-671015.html

    最新回复(0)