单向链表的基本操作
2016-09-20 14:46
330 查看
#include<stdio.h> #include<stdlib.h> #include <string.h> #include <ctype.h> typedef struct Student { char name[64];//64 int id;//4 char *p;//4 char**p2;//4 //struct Student s;//编译不通过 }Student; typedef struct Teacher00 { char name[64];//64 int id;//4 char *p;//4 char**p2;//4 //Student s1;//76 //Student *s2;//4 struct Teacher00 *t2;//编译可以通过 }Teacher00; typedef struct Node { int data; struct Node *next; }SLIST; //创建链表 SLIST* SLIST_create() { SLIST *pHead, *pM,*pCurrent; int data; pHead = (SLIST *)malloc(sizeof(SLIST)); if (pHead==NULL) { return NULL; } pHead->data = 0; pHead->next = NULL; pCurrent = pHead; printf("\nplease inter your data:"); scanf("%d",&data); while (data!=-1) { pM = (SLIST *)malloc(sizeof(SLIST)); if (pM==NULL) { return NULL; } pM->data = data; pM->next = NULL; //新节点如链表 pCurrent->next = pM; pCurrent = pM; printf("\nplease inter your data:"); scanf("%d",&data); } return pHead; } //遍历链表 int SLIST_print(SLIST*pHead) { SLIST *p = pHead->next; if (pHead==NULL) { return -1; } while (p) { printf("%d ",p->data); p = p->next; } printf("\n"); return 0; } //插入 在x的前面插入y 若不存在x 在把y插入到最后 不兼容找不到的情况 int SList_insert1(SLIST*pHead,int x,int y) { SLIST*pm,*p; if (pHead==NULL) { return -1; } p = pHead; pm = (SLIST*)malloc(sizeof(SLIST)); if (pm == NULL) { return -1; } pm->next = NULL; pm->data = y; while(p) { if (p->next->data == x) { break; } p = p->next; } pm->next = p->next; p->next =pm; return 0; } //插入兼容 int SList_insert(SLIST*pHead,int x,int y) { SLIST*pm=NULL,*pcurr=NULL,*pre=NULL; if (pHead==NULL) { return -1; } pre = pHead; pcurr = pHead->next; pm = (SLIST*)malloc(sizeof(SLIST)); if (pm == NULL) { return -1; } pm->next = NULL; pm->data = y; while(pcurr) { if (pcurr->data == x) { break; } pcurr = pcurr->next; pre=pre->next; } pm->next = pre->next; pre->next =pm; return 0; } //删除 data = x的节点 int SList_delete(SLIST*pHead,int x) { SLIST*p=NULL,*tmp=NULL; if (pHead==NULL) { return -1; } p = pHead->next; while(p->next) { if (p->next->data == x) { tmp = p->next; if (p->next->next) { p->next = p->next->next; free(tmp); } else { free(p->next); p->next=NULL; } break; } p = p->next; } return 0; } //链表逆置 int SList_reverse(SLIST*pHead) { SLIST*tmp=NULL,*n=NULL,*p=NULL; if (pHead==NULL||pHead->next == NULL||pHead->next->next==NULL) { return -1; } p = pHead->next; tmp = pHead->next->next; while (tmp) { n = tmp->next; tmp->next = p; p = tmp; tmp = n; } pHead->next->next = NULL; pHead->next = p; return 0; } //销毁 int SList_destory(SLIST*pHead) { SLIST*p=NULL,*tmp=NULL; if (pHead==NULL) { return -1; } p = pHead->next; while(p) { tmp = p->next; free(p); p = tmp; } return 0; } int main() { int ret; SLIST *phead =NULL; phead = SLIST_create(); ret = SLIST_print(phead); ret = SList_insert(phead,20,19); ret = SLIST_print(phead); SList_delete(phead,20); ret = SLIST_print(phead); SList_reverse(phead); ret = SLIST_print(phead); SList_destory(phead); system("pause"); return 0; }
相关文章推荐
- 单向链表,单向循环链表的基本操作
- 最基本的单向链表操作 C语言
- 单向链表的基本操作
- 单向链表的基本操作
- 算法与数据结构-单向链表的基本操作C语言实现
- 单向链表的基本操作
- 数据结构(1):单向链表的基本操作
- 单向链表的C语言实现与基本操作
- 单向链表的基本操作
- 单向循环链表的基本操作
- 单向链表基本操作(C语言实现)
- 单向链表的基本操作
- 名单(两)——基本操作单向链表(创、删、印、节点统计数)
- java单向链表基本操作简单实现
- 基本单向链表的操作
- java版的单向链表的基本操作
- 单向链表的基本操作-创建、插入、删除
- 数据结构_线性表_链式存储_单向循环链表的基本操作
- 单向链表的基本操作(常见面试题详解)
- 单向链表的基本操作