发布时间 : 星期三 文章《数据结构》daan更新完毕开始阅读4070316e561252d380eb6e9b
L->elem=newbase; /* 新基址 */ L->listsize+=LISTINCREMENT; }
q=&(L->elem[i]); /* q为插入位置*/ for(p=&L->elem[L->length];p>=q;--p) *(p+1)=*p; *q=e;
++(L->length); return OK; }/*ListInset_Sq*/
int listDelete_Sq(SqList *L,int i){
/*在顺序表L中删除第i个元素,并用 e返回其值 */ /* i的合法值为1<= i <= ListLength_Sq(L)*/ ElemType *p,*q;
if(i<1||i>L->length) return ERROR; /* i值不和法*/
p=&(L->elem[i]); /* p为删除元素的位置*/ /*被删除元素值赋给e */ q=L->elem+L->length; /* 表尾元素的位置 */ for(++p; p<=q; ++p)
*(p-1)=*p; /* 被删除元素之后的元素左移*/ --L->length; /* 表长减1 */ return OK; }/*ListDelete_Sq*/
int initList_Sq(SqList *L) {
L->elem=(ElemType *) malloc(LIST_INIT_SIZE *sizeof(ElemType)); if(!L->elem) exit(OVERFLOW); /* 存储分配失败*/ L->length=0; /* 空表长度为0 */ L->listsize=LIST_INIT_SIZE; int la_len; int i;
printf(\创建成功!\\n\
printf(\输入元素的个数:\ scanf(\
printf(\请输入新的元素:\\n\ for(i=1;i<=la_len;i++) {
scanf(\ L->length++; }
return OK; }
int locateElem_Sq(SqList L,int i ) {
printf(\你要查找的元素是:\\n\ printf(\ printf(\
system(\ return OK; }
int menu() { int i;
printf(\菜单\\n\
printf(\创建顺序链表\\n\ printf(\插入\\n\ printf(\删除\\n\ printf(\查找\\n\
printf(\打印所有元素\\n\ printf(\退出\\n\ printf(\
printf(\请输入正确的序号:\ scanf(\ if(i==0) {
exit(0); } else return i; }
(2) 建立一个按元素递增有序的单链表L,并编写程序实现: ①将x插入其中后仍保持L的有序性;
②将数据值介于min和max之间的结点删除,并保持L的有序性; ③(选做)将单链表L逆置并输出;
#include
/*构造一个空的线形链表L。*/ Link tempp=NULL;
if(!(tempp=(Link)malloc(sizeof(LNode)))){ printf(\ return ERROR; }
tempp->data=0;/*初始化头结点*/ tempp->next=NULL; L.len=0;
L.head=tempp;
L.tail=tempp;
printf(\链表创建成功!\\n\ int j ,i; int q;
printf(\输入线性表的元素个数:\\n\ scanf(\
printf(\输入新的元素:\\n\
for(i=1;i<=j;i++) {
scanf(\ Link p;
p= (Link)malloc(sizeof(LNode)); p->data = q;
p ->next=L.tail->next; L.tail->next =p; L.tail=L.tail->next; ++L.len; }
return OK; }
int fun1(LinkList &L,int i)//插入一个数仍保证递增性 { Link s1=L.head->next; Link s2=L.head; Link p; while(s1) {
if(s1->data
s1=s1->next; s2=s2->next;} else {
p= (Link)malloc(sizeof(LNode)); p->data = i; p->next=s2->next; s2->next=p;
++L.len; break; } }
p= (Link)malloc(sizeof(LNode));
p->data = i; p->next=s2->next; s2->next=p; L.tail=L.tail->next; return OK; }
int fun2(LinkList &L)//保留数字最大和最小的结点,删除其余的 { Link s=L.head->next->next; Link p=s;
while(p!=L.tail) {
s=s->next; free(p); p=s; }
L.head->next->next=L.tail; return OK; }
int fun3(LinkList L)//链表的逆置 {
Link p=L.head->next;
free(L.head);//释放原来的头结点 Link q=p->next; Link s=q->next;
Link tempp;//建立新的结点
tempp=(Link)malloc(sizeof(LNode)); tempp->next=L.tail; L.head=tempp; L.tail=p;
if(p==L.head->next) {
p->next=NULL; return OK;} p->next=NULL; while(1) {
if(q==L.head->next)//三个指针循环,当有一个指针指向L.head->next表示结束,退出循环
{q->next=p; break; }
q->next=p; p=s->next;
if(s==L.head->next)