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

#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("输入各个节点的数据:
");
    while((ch = getchar()) != '
')
    {
        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.
");break;
    case 0:
        printf("Not find it.
");
    }
    destroyLinkList(head);

    return 0;
}
原文地址:https://www.cnblogs.com/plxx/p/3485146.html