不带头结点,头部插入法创建链表

#include<stdio.h>

#include<stdlib.h>

#define ListSize 100



typedef int DataType;

typedef struct{

	DataType *data;

	int length;

	int size;

} Sqlist;

void initSqlist(Sqlist *L)

{

	L->data = (void*)malloc(ListSize * sizeof(int));

	if(! L->data) exit(0);

	L->length = 0;

	L->size = ListSize;

}

/*在顺序表的i位置插入元素*/

void insertSqlist(Sqlist *L,int i,DataType e){

	int j;

	DataType *base;

	if(i<1 || i>L->length+1) exit(0);

	if(L->length >= L->size)

	{

		base = (void *) realloc(L->data,(L->length+10)*sizeof(int));

		if(! base) exit(0);

		L->data = base;

		L->size = L->length +10;

	}

	for(j = L->length-1;j>= i-1;j--)

	{

		L->data[j+1] = L->data[j];



	}

	L->data[i-1] = e;

	L->length ++;

}



/*从顺序表中删除元素*/

void delSqlist(Sqlist *L,int i)

{

	/*位置是否合法*/

	int j;

	if(i<1 || i>L->length +1) exit(0);



	for(j = i;j < L->length;j++)

	xx{

		L->data[j-1] = L->data[j];

	}

	L->length --;

}

int main()

{

	Sqlist L;

	int i;

	initSqlist(&L);

	for(i = 0;i < 15;i++)

	{

		insertSqlist(&L,i+1,i+1);

	}

	for(i = 0;i<15;i++)

		printf("%d ",L.data[i]);

	putchar(10);

''

	delSqlist(&L,5);

	for(i = 0;i<15;i++)

		printf("%d ",L.data[i]);

	putchar(10);

	system("pause");



	return 0;

}

 

上面代码实现了顺序表的创建。

 

/*创建一个链表,头结点插入法*/

#include<stdio.h>

#include<stdlib.h>

typedef char DataType;



typedef struct ndoe{

    DataType data;

    struct node *next;

}ListNode;



typedef ListNode *LinkList;



/*头插入法

*重复读入新的数据,生成新的节点,然后将该节点插入到头部

*知道数据结束

*并返回头结点

*头结点中也存有元素

*这样读取的数据和读入的数据顺序是相反的

*/



LinkList createLinkList()

{

    char ch;

    ListNode *temp;

    LinkList head;

    head = NULL;

    printf("输入各个节点的数据:\n");

    while((ch = getchar()) != '\n')

    {

        temp = (ListNode *)malloc(sizeof(ListNode));

        if(!temp)exit(0);

        temp->data = ch;

        temp->next = head;

        head = temp;

    }

    return head;

}

/*

* 在链表的尾部插入数据*/

void insertLinkList(LinkList head,DataType item)

{

    LinkList p,temp = head;

    while(temp->next != NULL )

        temp = temp->next;

    p = (LinkList)malloc(sizeof (ListNode));

    if(!p) exit(0);

    p->data = item;



    p->next = NULL;

    temp->next = p;



    //return head;

}

/**释放链表的各个节点

*头结点的释放尤其重要

**/

void destroyLinkList(LinkList head)

{

    LinkList p;

    p = head;

    while(head)

    {

        p = head->next;

        free(head);

        head = p;

    }

}

/*在链表中查找元素是不是存在*/

int searchLinkList(LinkList head,DataType item)

{

    LinkList p = head;

    while(p)

    {

        if(p->data == item)

            return 1;

        p = p->next;

    }

    return 0;

}

int main(vodi)

{

    char ch;

    int status;

    LinkList p, head = createLinkList();

    for(p = head;p!= NULL;p = p->next)

        printf("%c",p->data);

    putchar(10);



    /*插入新的元素*/

    puts("输入你要插入的新元素:");

    ch = getchar();

    //getchar();

    insertLinkList(head,ch);

    for(p = head;p != NULL;p = p->next)

        printf("%c ",p->data);

    putchar(10);



    /*查找元素*/

    printf("输入要查找的元素:");

    ch = getchar();

    getchar();

    status =searchLinkList(head,ch);

    switch(status){

    case 1:

        printf("Find it.\n");break;

    case 0:

        printf("Not find it.\n");

    }

    destroyLinkList(head);



    return 0;

}

 

你可能感兴趣的:(链表)