-
-
Save syshack/3689622 to your computer and use it in GitHub Desktop.
链表
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include <stdio.h> | |
| #include <stdlib.h> | |
| #ifdef DEBUG | |
| #define my_printf(fmt, args...) printf("[%s: %d]"fmt, __FUNCTION__, __LINE__, ##args) | |
| #else | |
| #define my_printf(fmt, args...) | |
| #endif | |
| typedef int ElemType; | |
| typedef int status; | |
| typedef struct Lnode | |
| { | |
| ElemType data; | |
| struct Lnode *next; | |
| }Lnode,*LinkList; | |
| LinkList Create(LinkList L) | |
| { | |
| LinkList p; | |
| L=(LinkList)malloc(sizeof(Lnode)); | |
| L->data = 119; | |
| L->next = p = (LinkList)malloc(sizeof(Lnode)); | |
| p->data = 110; | |
| p->next = NULL; | |
| return L; | |
| } | |
| LinkList ADD_L(LinkList L,int data){ | |
| LinkList p,q = NULL; | |
| if(L!=NULL){ | |
| p = L; | |
| while (p&&p->next!=NULL){ | |
| p = p->next; | |
| } | |
| p->next = q = (LinkList)malloc(sizeof(Lnode)); | |
| q->data = data; | |
| q->next = NULL; | |
| } | |
| return L; | |
| } | |
| LinkList ADD_R(LinkList L){ | |
| LinkList p = NULL; | |
| p=(LinkList)malloc(sizeof(Lnode)); | |
| p->data = 45; | |
| p->next = L; | |
| return p; | |
| } | |
| /*插入节点,i插入的位置,data为插入的值*/ | |
| LinkList ADD(LinkList L,int i,int data){ | |
| LinkList p = L; | |
| LinkList s = NULL; | |
| int j = 0; | |
| while(p&&j<i-1){ | |
| p = p->next; | |
| ++j; | |
| } | |
| if(!p||j>i-1){ | |
| printf("Error"); | |
| } | |
| s=(LinkList)malloc(sizeof(Lnode)); | |
| s->data = data; | |
| s->next = p->next; | |
| p->next =s; | |
| return L; | |
| } | |
| LinkList DEL(LinkList L,int i){ | |
| LinkList p,q,s; | |
| int j; | |
| q = L; | |
| if(L!=NULL){ | |
| if(i==1){ | |
| p = q->next; | |
| q->next = NULL; | |
| free(q); | |
| return p; | |
| } | |
| else{ | |
| for(j=1;j<i;j++){ | |
| p = q->next; | |
| } | |
| s = q; | |
| if(p->next==NULL){ | |
| s->next = NULL; | |
| } | |
| else{ | |
| s->next = p->next; | |
| } | |
| p->next = NULL; | |
| free(p); | |
| return L; | |
| } | |
| } | |
| return NULL; | |
| } | |
| LinkList REV(LinkList L){ | |
| LinkList p=L,s,q; | |
| if (L!=NULL) | |
| { | |
| q = p->next; | |
| while(q){ | |
| s = q->next; | |
| printf("line 1 \n"); | |
| q->next = p; | |
| printf("line 2 \n"); | |
| p = q; | |
| printf("line 3 \n"); | |
| q = s; | |
| printf("line 4 \n"); | |
| } | |
| L->next = NULL; | |
| return p; | |
| } | |
| else{ | |
| return NULL; | |
| } | |
| } | |
| void GetElem(LinkList L){ | |
| LinkList p = NULL; | |
| int i = 1; | |
| if(L!=NULL){ | |
| printf("%d:%d\n",i,L->data ); | |
| p = L->next; | |
| while (p){ | |
| printf("%d:%d\n",++i,p->data); | |
| p = p->next; | |
| } | |
| } | |
| } | |
| int main(int argc, char const *argv[]) | |
| { | |
| /* code */ | |
| LinkList L = NULL; | |
| LinkList L1 = NULL; | |
| LinkList L2 = NULL; | |
| LinkList L3 = NULL; | |
| LinkList L4 = NULL; | |
| LinkList L5 = NULL; | |
| L = Create(L); | |
| printf("Create\n"); | |
| GetElem(L); | |
| L3 = ADD_R(L); | |
| printf("Insert 45\n"); | |
| GetElem(L3); | |
| L2 = ADD_L(L3, 23); | |
| printf("Insert 23\n"); | |
| GetElem(L2); | |
| L1 = ADD(L3, 1, 12); | |
| printf("Insert 12\n"); | |
| GetElem(L1); | |
| printf("DEL line 2\n"); | |
| L4 = DEL(L3, 1); | |
| GetElem(L4); | |
| printf("REV\n"); | |
| L5 = REV(L4); | |
| GetElem(L5); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment