代码:
#include<stdio.h> #include<stdlib.h> #define OK 1 #define FALSE 0 typedef int Status; typedef float ElemType; typedef struct LNode { ElemType data; struct LNode *next; } LNode,* LinkList; LinkList s,r,P; Status i; //创建单链表 void CreatListTail(LinkList &L,Status n) { r=L=(LinkList)malloc(sizeof(LNode)); L->next=NULL; for(i=1;i<=n;++i) { s=(LinkList)malloc(sizeof(LNode)); scanf("%f",&s->data); s->next=NULL; r->next=s; r=s; } } ElemType GetElem(LinkList &L,Status i) { i=i+1; LinkList P; Status j; P=L; j=1; while(P&&j<i) { P=P->next; j++; } return P->data; } ElemType ListInsert(LinkList &L,int i,ElemType e) { i=i+1; Status j; P=L; j=1; while(P&&j<i-1) { P=P->next; ++j; } if(!P||j>i-1) { return FALSE; } s=(LinkList)malloc(sizeof(LNode)); s->data=e; s->next=P->next; P->next=s; return OK; } void print(LinkList &L) { LinkList P; P=L->next; while(P!=NULL) { printf("%f ",P->data); P=P->next; } } Status ListDelete(LinkList &L,int i) { i=i+1; ElemType e; Status j; LinkList q; P=L; j=1; while(P->next&&j<i-1) { P=P->next; j++; } if(!(P->next)||j>i-1) { return FALSE; } q=P->next; P->next=q->next; e=q->data; free(q); return e; } int main() { Status n,i; LinkList L,P; printf("请输入节点个数:"); scanf("%d",&n); printf("创建单链表(输入每个结点的数据域):"); CreatListTail(L,n); printf("打印单链表:"); print(L); printf("\n"); printf("获取第二个元素:%f\n",GetElem(L,2)); ListInsert(L,2,11); printf("将11插入到第二个位置,并输出新的链表:"); print(L); printf("\n"); printf("删除第二个节点,并打印新的链表"); ListDelete(L,2); print(L); return 0; }