3、程序源代码 #include
struct list *next; }LIST;
void InitList(LIST **p) {
*p=NULL; }
void InsertList1(LIST **p,int item,int rc) {
int i;
LIST *u,*q,*r;
u=(LIST *)malloc(sizeof(list)); u->data=item;
for(i=1,r=*p;i q=r; r=r->next; } if(r==*p) *p=u; else q->next=u; u->next=r; } void InsertList2(LIST **p,int item) { LIST *u,*q,*r; u=(LIST *)malloc(sizeof(list)); u->data=item; for(r=*p;r!=NULL&&r->data q->next=u; u->next=r; } int DeleteList(LIST **p,int item) { LIST *q,*r; q=*p; r=q; if(q==NULL) return 1; if(q->data==item) { *p=q->next; free(r); return 0; } for(;q->next!=NULL&&q->data!=item;r=q,q=q->next); if(q->data==item) { r->next=q->next; free(q); return 0; } return 1; } int FindList(LIST *p,int item) { int i; for(i=1;p->data!=item&&p!=NULL;p=p->next,i++); return(p==NULL)?-1:i; } void OutputList(LIST *p) { while(p!=NULL) { printf(\ p=p->next; } printf(\} void FreeList(LIST **p) { LIST *q,*r; for(q=*p;q!=NULL;) { r=q; q=q->next; free(r); } *p=NULL; } int main() { LIST *p; int choice,i,rc; InitList(&p); while(1) { printf(\ printf(\指定位置追加-----\\n\ printf(\升序追加---------\\n\ printf(\查找结点---------\\n\ printf(\删除结点---------\\n\ printf(\输出链表---------\\n\ printf(\清空链表---------\\n\ printf(\退出-------------\\n\ printf(\ printf(\请输入(0~6)选择操作:\ fflush(stdin); scanf(\ switch(choice) { case 0: return -1; case 1: printf(\请输入新增结点的键值和位置:\ scanf(\ InsertList1(&p,i,rc); break; case 2: printf(\请输入新增结点的键值:\ scanf(\ InsertList2(&p,i); break; case 3: printf(\请输入要查找结点的键值:\ scanf(\ rc=FindList(p,i); if(rc>0) printf(\位置为:%d\\n\ else printf(\没找到\\n\ break; case 4: printf(\请输入要删除结点的键值:\ scanf(\ rc=DeleteList(&p,i); if(rc==0) printf(\删除成功\\n\ else printf(\没找到\\n\ break; case 5: printf(\链表内容为:\\n\ OutputList(p); break; case 6: FreeList(&p); break; } } printf(\感谢您的使用!再见!\\n\}