📄 linktab.c
字号:
#include <unistd.h>#include <fcntl.h>#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <errno.h>#include <string.h>#include <netinet/in.h>#include <sys/socket.h>#define MAX_BUF_SIZE 1024#define MIN_BUF_SIZE 256void exit();void *malloc(unsigned size);void free(void *ptr);typedef struct{ struct sockaddr_in addr; socklen_t addrlen;}IPINFO;typedef struct{ char uid[MIN_BUF_SIZE]; IPINFO from;}UINFO;//结点typedef struct node{ UINFO info; struct node *next; struct node *pre;}NODE;//头结点typedef struct{ UINFO top; NODE *head; NODE *tail; int len;}HEADNODE;//创建头结点void showUid(HEADNODE *head){ NODE *p; p=head->head; int i=0; while(p!=NULL) { printf("[%d]uid = %s ",i++,p->info.uid); p=p->next; }}HEADNODE *createHead(){ HEADNODE *p; if((p=(HEADNODE *)malloc(sizeof(HEADNODE)))==NULL) { fprintf(stderr,"Out of memony!%s\n",strerror(errno)); exit(1); } p->len=0; //空表头指针和尾指针都为空 p->head=NULL; p->tail=NULL; return p;}//添加结点NODE *addNode(HEADNODE *head,UINFO *sp){ NODE *newNode=NULL; if((newNode=(NODE *)malloc(sizeof(NODE)))==NULL) { fprintf(stderr,"Out of memony!%s\n",strerror(errno)); return NULL; } strcpy(newNode->info.uid,sp->uid); newNode->info.from = sp->from; printf("newNode uid = %s \n",newNode->info.uid); if(NULL==head->head) { //表为空表的情况 newNode->pre=NULL; newNode->next=NULL; head->head=newNode; head->tail=newNode; } else { //表不为空 head->tail->next=newNode; newNode->pre=head->tail; newNode->next=NULL; head->tail=newNode; } (head->len)++; //showUid(head); return newNode; }int delNode(HEADNODE *head,UINFO *sp){ int n; if(head->head==NULL) { return 0; } NODE *curNode=head->head; while(curNode!=NULL) { //printf("tab uid = %s temp uid = %s ",curNode->info.uid,sp->uid); if((n=strcmp(curNode->info.uid,sp->uid))==0) { if(curNode->pre==NULL) { head->head=NULL; head->tail=NULL; } else if(curNode->next==head->tail) { head->tail=curNode->pre; curNode->pre->next=NULL; } else { curNode->pre->next=curNode->next; curNode->next->pre=curNode->pre; } (head->len)--; //printf("del node %s",curNode->info.uid); free(curNode); return 1; } curNode=curNode->next; } return 0;}void dropTab(HEADNODE *head){ NODE *p1,*p2; p1=head->head; int i=0; while(p1!=NULL) { p2=p1->next; free(p1); p1=p2; printf("[%d]deleted\n ",++i); }}NODE *searchNode(const HEADNODE *head,UINFO *sp){ if(head->head==NULL) { return NULL; } NODE *curNode=head->head; while(curNode!=NULL) { if(strcmp(curNode->info.uid,sp->uid)==0) { return curNode; } curNode=curNode->next; } return NULL;}void listUid(HEADNODE *head,char *s){ NODE *p=head->head; int i=0; s[0]=0; while(p!=NULL) { printf("u%i = %s\n",i,p->info.uid); strcat(s,p->info.uid); strcat(s,"\n"); p=p->next; i++; } //printf("[uidlist][%d] = %s end\n",i,s);}/*int main(void){ HEADNODE *head = createHead(); NODE *p; UINFO temp1; char tempstr[256]; int i; for(i=0;i<3;i++) { printf("get uid :"); fgets(temp1.uid,256,stdin); addNode(head,&temp1); bzero(&temp1,sizeof(UINFO)); } p=head->head; i=0; while(p!=NULL) { printf("[%d]uid = %s ",i++,p->info.uid); p=p->next; } printf("search uid:"); fgets(temp1.uid,256,stdin); p=searchNode(head,&temp1); printf("p uid = %s",p->info.uid); dropTab(head); return 0;}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -