数据结构 线性表 循环链表 插入与删除

来源:互联网 发布:大数据龙头公司 编辑:程序博客网 时间:2024/05/22 00:06
#include <stdio.h>#include <stdlib.h>#include <iostream.h>#define OK          1#define ERROR       0#define OVERFLOW    -2typedef int ElemType;typedef struct LNode{ElemType data;struct LNode *next;}LNode, *LinkList;void CreateList_L(LinkList &L, int n){int i;LinkList p,q;L = (LinkList) malloc (sizeof(LNode));if (!L){exit(OVERFLOW);}q = L;q->next = L;for (i=n; i>0; --i){p = (LinkList) malloc (sizeof (LNode));if (!p){exit(OVERFLOW);}scanf("%d",&p->data);p->next = L;q->next = p;q = p;}}void Display(LinkList L){LinkList p = L->next;while (p != L){printf("%d ",p->data);p = p->next;}printf("\n");}int ListInsert_L(LinkList &L, int i, ElemType e){LinkList s,p = L;int j = 0;while (p->next != L  && j<i-1){p = p->next;++j;}if ( (p->next == L) || j>i-1){return ERROR;}s = (LinkList) malloc (sizeof(LNode));s->data = e;s->next = p->next;p->next = s;return OK;}int ListDelete_L(LinkList &L, int i, ElemType &e){LinkList p = L,q;int j = 0;while (p->next != L && j<i-1){p = p->next;++j;}if ((p->next == L) || j>i-1){return ERROR;}q = p->next;p->next = q->next ;e = q->data ;free(q);return OK;}int main(){int i,e,n;LinkList L;printf("请输入您要创建循环链表的元素的个数:");scanf("%d",&n);CreateList_L(L,n);printf("请输入您要插入元素的位置:");scanf("%d",&i);printf("请输入您要插入的元素:");scanf("%d",&e);ListInsert_L(L,i,e);printf("插入元素后的单链表是:");Display(L);printf("请输入您要删除的元素的位置:");scanf("%d",&i);ListDelete_L(L,i,e);printf("该位置上的元素是: %d\n",e);printf("删除元素 %d 后的单链表是:",e);Display(L);return 0;}

原创粉丝点击