逆位序正位序建表以及插入和删除值以及返回链表中元素个数

来源:互联网 发布:js int 转date 编辑:程序博客网 时间:2024/04/29 01:29
#include<stdio.h>#include<stdlib.h>#include<malloc.h>#define OK 1#define ERROR 0#define OVERFLOW -2typedef int status;typedef int ElemType;typedef struct LNode{ElemType data;struct LNode *next;}LNode,*LinkList;void creatlist(LinkList &L,int n)//逆位序建表,就是插入节点;{int i;LinkList p;L=(LinkList)malloc(sizeof(LNode));//建立一个头指针L->next=NULL;printf("输入%d个数",n);for(i=n;i>0;--i){p=(LinkList)malloc(sizeof(LNode));//建立一个头结点scanf("%d",&p->data);p->next=L->next;L->next=p;}}/*void creatlist(LinkList &L,int n)//正位序建表,移动头指针。{int i;LinkList r;LinkList s;L=(LinkList)malloc(sizeof(LNode));r=L;printf("输入链表中的元素:\n");for(i=0;i<n;i++){s=(LinkList)malloc(sizeof(LNode));scanf("%d",&s->data);r->next=s;r=s;}r->next=NULL;}*/void printlist(LinkList &L){    LinkList p;for(p=L->next;p!=NULL;p=p->next){printf("%d",*p);}}void insertlist(LinkList &L,int i,ElemType e){LinkList p;LinkList s;int j=0;p=L;while(p&&j<i-1){p=p->next;++j;}s=(LinkList )malloc(sizeof(LNode));s->next=p->next;p->next=s;s->data=e;}int delectlist(LinkList &L,int i,ElemType &e){LinkList p;LinkList s;int j=0;p=L;while(p&&j<i-1){p=p->next;++j;}s=p->next;p->next=s->next;e=s->data;return e;}void listlength(LinkList &L){int d=0;LinkList p;p=L;while(p->next!=NULL){d++;p=p->next;}printf("%d\n",d);}int main(){int n,e,i,j;LinkList L;printf("input a data:\n");scanf("%d",&n);creatlist(L,n);printf("链表的内容为:\n");printlist(L);printf("输入一个插入位置:\n");scanf("%d",&i);printf("输入一个插入值:\n");scanf("%d",&e);insertlist(L,i,e);printlist(L);printf("输入删除元素位置:\n");scanf("%d",&j);delectlist(L,j,e);printf("%d\n",e);printf("链表中元素的个数为:\n");listlength(L);return 0;}

阅读全文
0 0