不带头结点,头部插入法创建链表
#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; }