唐国民版
已在VC++6.0调试
#include<stdio.h> #include<malloc.h> typedef char ElemType; typedef struct LNODE /*结点类型说明*/ { ElemType data; /*数据域*/ struct LNode *next; /*指针域*/ }LNode,*LinkList; /*别名,指针类型说明*/ /*在带头结点的单链表中第i个位置(从1开始)之后插入元素*/ int ListInsert_L(LinkList head,int i,ElemType e) { LinkList p=head; LinkList s; int j ; p=p->next; for(j=1;j<i;j++) { if(p)p=p->next; else break; } if(!p||i<1) { printf("error!!请输入正确的i值!!\n"); return 0; } s=(LinkList)malloc(sizeof(LNode)); s->data=e; s->next=p->next; /*在当前结点p之后插入结点s*/ p->next=s; /**/ return 1; } /*建立链表,输入元素,用头插法建立带头结点的单链表(逆序),输入0结束*/ LinkList CreateList_L(LinkList head) { ElemType temp; LinkList p; printf("请输入结点值(输入0结束):"); fflush(stdin); scanf("%c",&temp); while(temp!='0'){ if(('A'<=temp&&temp<='Z')||('a'<=temp&&temp<='z')) { p=(LinkList)malloc(sizeof(LNode)); /*清除键盘缓冲区*/ p->data=temp; p->next=head->next; head->next=p; /*在链表头部插入结点,即头插法*/ } printf("请输入结点值(输入0结束):"); fflush(stdin); scanf("%c",&temp); } return head; } /*在带头结点的单链表中删除第i个位置(从1开始)的元素*/ int ListDel_L(LinkList head,int i) { LinkList p,tmp; int j; p=head->next; tmp=head; for(j=1;j<i;j++) { if(p) { p=p->next; tmp=tmp->next; } else break; } if(!p||i<1) { printf("error!!请输入正确的i值!!\n"); return 0; } tmp->next=p->next; free(p); return 1; } /*求表长*/ int ListLength(LinkList head) { int len=0; LinkList temp; temp=head; while(temp->next!=NULL) { len++; temp=temp->next; } return len; } /*排序*/ void Bubblepoint(LinkList head) { LinkList pre,cur,next; int i,j; i=ListLength(head); printf("表长=%d\n",i); while(i!=1) { pre=head; cur=head->next; next=cur->next; j=i; i--; while(j!=1) { j--; if(cur->data>next->data) { cur->next=next->next; next->next=cur; pre->next=next; pre=next; next=cur->next; } else { pre=cur; cur=next; next=next->next; } } } } /*顺序输出链表的内容*/ void ListPint_L(LinkList head) { LinkList p; int i=0; p=head->next; /*p指向第1个结点*/ while(p!=NULL) { i++; printf("第%d个元素是:",i); printf("%c\n",p->data); p=p->next; } } void main() { int i; char cmd,e; LinkList head; head=(LinkList)malloc(sizeof(LNode)); /*头结点*/ head->next=NULL; CreateList_L(head); Bubblepoint(head); ListPint_L(head); do { printf("i,I...插入\n"); printf("d,D...删除\n"); printf("q,Q...退出\n"); do { fflush(stdin); scanf("%c",&cmd); }while((cmd!='d')&&(cmd!='D')&&(cmd!='q')&&(cmd!='Q')&&(cmd!='i')&&(cmd!='I')); switch(cmd) { case 'i': case 'I': printf("请输入你要插入的数据:"); fflush(stdin); scanf("%c",&e); printf("请输入你要插入的位置:"); scanf("%d",&i); ListInsert_L(head,i,e); ListPint_L(head); break; case'd': case'D': printf("请输入你要删除元素的位置:"); fflush(stdin); scanf("%d",&i); ListDel_L(head,i); ListPint_L(head); break; } }while((cmd!='q')&&(cmd!='Q')); }
浙公网安备 33010602011771号