顺序表奇偶顺序调整,单链表原地倒置,删除单链表中所有值为x的结点----数据结构(C语言版)

/*
请编写一个算法函数partion(sequence_list *L),尽可能快地将顺序表L中的所有奇数调整到表的左边,
所有偶数调整到表的右边,并分析算法的时间复杂度。
*/
/请将本函数补充完整,并进行测试/
顺序表的定义:

#define maxsize 100
typedef int datetype;
typedef struct{
	datatype a[maxsize];
	int size;
}sequence_list;
void partion(sequence_list *L)
{
    int i,j,temp;
    for(i = 0,j = L->size-1;i != j;)
    {
        if(L->a[i] % 2 == 0)
        if(L->a[j] % 2){
            temp = L->a[i];
            L->a[i] = L->a[j];
            L->a[j] = temp;
            i++;j--;
        }
        else j--;
        else i++;
    }
}

/*
不带头结点的单链表head就地倒置,使表变成(an,an-1,…a3.a2,a1)。
*/

typedef int datatype;
typedef struct link_node{
	datatype info;
	struct link_node * next;
}linknode;
typedef linknode * linklist;
linklist reverse1(linklist head)//倒置,原表改动
{
    linklist p = NULL,q = NULL;
    while(head)
    {
        p = head->next;
        head->next = q;
        q = head;
        head = p;
    }
    return q;
}

/*
带头结点的单链表head就地倒置,使表变成(an,an-1,…a3.a2,a1)。
*/

linklist reverse(linklist head)
{
    linklist h = head->next,p = NULL,q = NULL;
    while(h)
    {
        p = h->next;
        h->next = q;
        q = h;
        h = p;
    }
    head->next = q;//将头结点指向新头结点
    return head;
}

/*编写函数slnklist delx(linklist head, datatype x),删除不带头结点单链表head中所有为x 的结点。
并构造测试用例进行测试。
*/

linklist delx(linklist head,datatype x)
{
    linklist pre=NULL,p=NULL,del;
    p = head;
    while(p)
    {
        if(p->info!=x)
        {
            pre = p;
            p = p->next;
        }
        else
        {
            del = p;//记录当前要删除的结点
            pre->next=p->next;
            p = p->next;
            free(del);
        }
    }
    return head;
}

猜你喜欢

转载自blog.csdn.net/qq_43402639/article/details/93379430
今日推荐