《数据结构》daan 联系客服

发布时间 : 星期三 文章《数据结构》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 int initList(LinkList &L) {

/*构造一个空的线形链表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)